diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2019-05-24 15:54:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-24 15:54:00 +0200 |
commit | ac070afecc33e9f263353455debd07876b0e91bf (patch) | |
tree | e43d28cb88740b0d95c2ae0bbd8728708bc09d98 | |
parent | bcb4d1d00c7306a4f368f6a1a3c63c2ae738aae9 (diff) | |
parent | add1743580149c3d1e570aafff3180cee216162e (diff) | |
download | libgit2-ac070afecc33e9f263353455debd07876b0e91bf.tar.gz |
Merge pull request #5088 from pks-t/pks/cache-eviction-segfault
cache: fix cache eviction using deallocated key
-rw-r--r-- | src/cache.c | 3 | ||||
-rw-r--r-- | tests/blame/simple.c | 8 |
2 files changed, 9 insertions, 2 deletions
diff --git a/src/cache.c b/src/cache.c index 2f5c8f99b..3128e40c5 100644 --- a/src/cache.c +++ b/src/cache.c @@ -134,9 +134,8 @@ static void cache_evict_entries(git_cache *cache) evict_count--; evicted_memory += evict->size; - git_cached_obj_decref(evict); - git_oidmap_delete(cache->map, key); + git_cached_obj_decref(evict); } cache->used_memory -= evicted_memory; diff --git a/tests/blame/simple.c b/tests/blame/simple.c index 30b78168f..16e7bc400 100644 --- a/tests/blame/simple.c +++ b/tests/blame/simple.c @@ -203,6 +203,14 @@ void test_blame_simple__trivial_libgit2(void) check_blame_hunk_index(g_repo, g_blame, 49, 60, 1, 0, "d12299fe", "src/git.h"); } +/* This was leading to segfaults on some systems during cache eviction. */ +void test_blame_simple__trivial_libgit2_under_cache_pressure(void) +{ + ssize_t old_max_storage = git_cache__max_storage; + git_cache__max_storage = 1024 * 1024; + test_blame_simple__trivial_libgit2(); + git_cache__max_storage = old_max_storage; +} /* * $ git blame -n b.txt -L 8 |