diff_tform: fix potential NULL pointer access

The `normalize_find_opts` function in theory allows for the
incoming diff to have no repository. When the caller does not
pass in diff find options or if the GIT_DIFF_FIND_BY_CONFIG value
is set, though, we try to derive the configuration from the
diff's repository configuration without first verifying that the
repository is actually set to a non-NULL value.

Fix this issue by explicitly checking if the repository is set
and if it is not, fall back to a default value of
GIT_DIFF_FIND_RENAMES.
This commit is contained in:
Patrick Steinhardt 2016-02-23 11:07:03 +01:00
parent 3d1abc5afc
commit 32f0798413

View File

@ -261,6 +261,7 @@ static int normalize_find_opts(
if (!given ||
(given->flags & GIT_DIFF_FIND_ALL) == GIT_DIFF_FIND_BY_CONFIG)
{
if (diff->repo) {
char *rule =
git_config__get_string_force(cfg, "diff.renames", "true");
int boolval;
@ -273,6 +274,10 @@ static int normalize_find_opts(
opts->flags |= GIT_DIFF_FIND_RENAMES;
git__free(rule);
} else {
/* set default flag */
opts->flags |= GIT_DIFF_FIND_RENAMES;
}
}
/* some flags imply others */