summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@edwardthomson.com>2019-05-24 15:54:00 +0200
committerGitHub <noreply@github.com>2019-05-24 15:54:00 +0200
commitac070afecc33e9f263353455debd07876b0e91bf (patch)
treee43d28cb88740b0d95c2ae0bbd8728708bc09d98
parentbcb4d1d00c7306a4f368f6a1a3c63c2ae738aae9 (diff)
parentadd1743580149c3d1e570aafff3180cee216162e (diff)
downloadlibgit2-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.c3
-rw-r--r--tests/blame/simple.c8
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