branch: fix segfault when resolving an invalid HEAD
[gitweb.git] / diff.c
diff --git a/diff.c b/diff.c
index d8f9242ea8fe2ee92884623939a85b6587a3ad9d..b28933f870d7dd11596fd3715280e1488ac2430f 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -1468,14 +1468,15 @@ int diff_populate_filespec(struct diff_filespec *s, int size_only)
                enum object_type type;
                struct sha1_size_cache *e;
 
+               if (size_only && use_size_cache &&
+                   (e = locate_size_cache(s->sha1, 1, 0)) != NULL) {
+                       s->size = e->size;
+                       return 0;
+               }
+
                if (size_only) {
-                       e = locate_size_cache(s->sha1, 1, 0);
-                       if (e) {
-                               s->size = e->size;
-                               return 0;
-                       }
                        type = sha1_object_info(s->sha1, &s->size);
-                       if (type < 0)
+                       if (use_size_cache && 0 < type)
                                locate_size_cache(s->sha1, 0, s->size);
                }
                else {