pack-objects: don't check size when the object is bad

sha1_object_info() in check_objects() may fail to locate an object in the pack and return type OBJ_BAD. In that case, it will likely leave the "size" field untouched. We delay error handling until later in prepare_pack() though. Until then, do not touch "size" field. This field should contain the default value zero, but we can't say sha1_object_info() cannot damage it. This becomes more important later when the object size may have to be retrieved back from the (non-existing) pack. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Nguyễn Thái Ngọc Duy committed Apr 14, 2018 at 17:35 UTC 660b373542589157aff78dd37ce582237027ba94
1 file changed +2 -2
builtin/pack-objects.c
+2 -2
@@ -1742,7 +1742,7 @@ static void get_object_details(void)
1742 for (i = 0; i < to_pack.nr_objects; i++) {
1743 struct object_entry *entry = sorted_by_offset[i];
1744 check_object(entry);
1745 - if (big_file_threshold < entry->size)
1745 + if (entry->type_valid && big_file_threshold < entry->size)
1746 entry->no_try_delta = 1;
1747 }
1748
@@ -2453,7 +2453,7 @@ static void prepare_pack(int window, int depth)
2453 */
2454 continue;
2455
2456 - if (entry->size < 50)
2456 + if (!entry->type_valid || entry->size < 50)
2457 continue;
2458
2459 if (entry->no_try_delta)