mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-07 12:57:05 +00:00
blame: handle error when resoling HEAD in normalize_options
When normalizing options we try to look up HEAD's OID. While this action may fail in malformed repositories we never check the return value of the function. Fix the issue by converting `normalize_options` to actually return an error and handle the error in `git_blame_file`.
This commit is contained in:
parent
8a4a343a2b
commit
e850e98ddb
11
src/blame.c
11
src/blame.c
@ -178,7 +178,7 @@ const git_blame_hunk *git_blame_get_hunk_byline(git_blame *blame, size_t lineno)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void normalize_options(
|
||||
static int normalize_options(
|
||||
git_blame_options *out,
|
||||
const git_blame_options *in,
|
||||
git_repository *repo)
|
||||
@ -190,7 +190,9 @@ static void normalize_options(
|
||||
|
||||
/* No newest_commit => HEAD */
|
||||
if (git_oid_iszero(&out->newest_commit)) {
|
||||
git_reference_name_to_id(&out->newest_commit, repo, "HEAD");
|
||||
if (git_reference_name_to_id(&out->newest_commit, repo, "HEAD") < 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/* min_line 0 really means 1 */
|
||||
@ -204,6 +206,8 @@ static void normalize_options(
|
||||
out->flags |= GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES;
|
||||
if (out->flags & GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES)
|
||||
out->flags |= GIT_BLAME_TRACK_COPIES_SAME_FILE;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static git_blame_hunk *split_hunk_in_vector(
|
||||
@ -362,7 +366,8 @@ int git_blame_file(
|
||||
git_blame *blame = NULL;
|
||||
|
||||
assert(out && repo && path);
|
||||
normalize_options(&normOptions, options, repo);
|
||||
if ((error = normalize_options(&normOptions, options, repo)) < 0)
|
||||
goto on_error;
|
||||
|
||||
blame = git_blame__alloc(repo, normOptions, path);
|
||||
GITERR_CHECK_ALLOC(blame);
|
||||
|
Loading…
Reference in New Issue
Block a user