Skip to content

Commit

Permalink
pack-objects: avoid reading uninitalized data
Browse files Browse the repository at this point in the history
In the main loop of find_deltas, we do:

  struct object_entry *entry = *list++;
  ...
  if (!*list_size)
	  ...
	  break

Because we look at and increment *list _before_ the check of
list_size, in the very last iteration of the loop we will
look at uninitialized data, and increment the pointer beyond
one past the end of the allocated space. Since we don't
actually do anything with the data until after the check,
this is not a problem in practice.

But since it technically violates the C standard, and
because it provokes a spurious valgrind warning, let's just
move the initialization of entry to a safe place.

This fixes valgrind errors in t5300, t5301, t5302, t303, and
t9400.

Signed-off-by: Jeff King <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
peff authored and gitster committed Nov 2, 2008
1 parent 13494ed commit 421b488
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion builtin-pack-objects.c
Original file line number Diff line number Diff line change
Expand Up @@ -1377,7 +1377,7 @@ static void find_deltas(struct object_entry **list, unsigned *list_size,
memset(array, 0, array_size);

for (;;) {
struct object_entry *entry = *list++;
struct object_entry *entry;
struct unpacked *n = array + idx;
int j, max_depth, best_base = -1;

Expand All @@ -1386,6 +1386,7 @@ static void find_deltas(struct object_entry **list, unsigned *list_size,
progress_unlock();
break;
}
entry = *list++;
(*list_size)--;
if (!entry->preferred_base) {
(*processed)++;
Expand Down

0 comments on commit 421b488

Please sign in to comment.