Skip to content

Commit

Permalink
bundle-uri: plug leak in unbundle_from_file()
Browse files Browse the repository at this point in the history
The function `unbundle_from_file()` has two memory leaks:

  - We do not release the `struct bundle_header header` when hitting
    errors because we return early without any cleanup.

  - We do not release the `struct strbuf bundle_ref` at all.

Plug these leaks by creating a common exit path where both of these
variables are released.

While at it, refactor the code such that the variable assignments do not
happen inside the conditional statement itself according to our coding
style.

Signed-off-by: Toon Claes <[email protected]>
Acked-by: Patrick Steinhardt <[email protected]>
Signed-off-by: Junio C Hamano <[email protected]>
  • Loading branch information
To1ne authored and gitster committed Oct 10, 2024
1 parent 777489f commit 6dab49b
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions bundle-uri.c
Original file line number Diff line number Diff line change
Expand Up @@ -368,17 +368,23 @@ static int unbundle_from_file(struct repository *r, const char *file)
struct strbuf bundle_ref = STRBUF_INIT;
size_t bundle_prefix_len;

if ((bundle_fd = read_bundle_header(file, &header)) < 0)
return 1;
bundle_fd = read_bundle_header(file, &header);
if (bundle_fd < 0) {
result = 1;
goto cleanup;
}

/*
* Skip the reachability walk here, since we will be adding
* a reachable ref pointing to the new tips, which will reach
* the prerequisite commits.
*/
if ((result = unbundle(r, &header, bundle_fd, NULL,
VERIFY_BUNDLE_QUIET | (fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0))))
return 1;
result = unbundle(r, &header, bundle_fd, NULL,
VERIFY_BUNDLE_QUIET | (fetch_pack_fsck_objects() ? VERIFY_BUNDLE_FSCK : 0));
if (result) {
result = 1;
goto cleanup;
}

/*
* Convert all refs/heads/ from the bundle into refs/bundles/
Expand Down Expand Up @@ -407,6 +413,8 @@ static int unbundle_from_file(struct repository *r, const char *file)
0, UPDATE_REFS_MSG_ON_ERR);
}

cleanup:
strbuf_release(&bundle_ref);
bundle_header_release(&header);
return result;
}
Expand Down

0 comments on commit 6dab49b

Please sign in to comment.