cgit

commit 382ecf152e1bd9546f6c84ace71c62ca07f6648b

Author: John Keeping <john@keeping.me.uk>

cache: don't leave cache_slot fields uninitialized

Valgrind says:

==18344== Conditional jump or move depends on uninitialised value(s)
==18344==    at 0x406C83: open_slot (cache.c:63)
==18344==    by 0x407478: cache_ls (cache.c:403)
==18344==    by 0x404C9A: process_request (cgit.c:639)
==18344==    by 0x406BD2: fill_slot (cache.c:190)
==18344==    by 0x4071A0: cache_process (cache.c:284)
==18344==    by 0x404461: main (cgit.c:952)
==18344==  Uninitialised value was created by a stack allocation
==18344==    at 0x40738B: cache_ls (cache.c:375)

This is caused by the keylen field being used to calculate whether or
not a slot is matched.  We never then check the value of this and the
length of data read depends on the key length read from the file so this
isn't dangerous, but it's nice to avoid branching based on uninitialized
data.

Signed-off-by: John Keeping <john@keeping.me.uk>

 cache.c | 2 +-


diff --git a/cache.c b/cache.c
index d339435b7f8b7fc8cd75216ee594787074f98f31..fa83ddc33c15d71e6e6372bd6713bbfd9c4ecaa6 100644
--- a/cache.c
+++ b/cache.c
@@ -376,7 +376,7 @@ {
 	DIR *dir;
 	struct dirent *ent;
 	int err = 0;
-	struct cache_slot slot;
+	struct cache_slot slot = { 0 };
 	struct strbuf fullname = STRBUF_INIT;
 	size_t prefixlen;