Re: [PATCH v2 2/3] config.c: don't leak memory in handle_path_include()
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Oct 21, 2021, 23:30 UTC
- Message-ID
- <xmqqmtn2gdlv.fsf@gitster.g>
- In-Reply-To
- <patch-v2-2.3-d6d04da1d9d-20211021T195133Z-avarab@gmail.com>
Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
Show 16 quoted lines
> Fix a memory leak in the error() path in handle_path_include(), this > allows us to run t1305-config-include.sh under SANITIZE=leak, > previously 4 tests there would fail. This fixes up a leak in > 9b25a0b52e0 (config: add include directive, 2012-02-06). > > Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> > --- > config.c | 7 +++++-- > t/t1305-config-include.sh | 1 + > 2 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/config.c b/config.c > index 2dcbe901b6b..c5873f3a706 100644 > --- a/config.c > +++ b/config.c > @@ -148,8 +148,10 @@ static int handle_path_include(const char *path, struct config_include_data *inc
Not a problem introduced by this function, but if you look at this change with "git show -W", we'd notice that the function name on the hunk header looks strange. I think we should add a blank line before the beginning of the function.
Show 20 quoted lines
> if (!is_absolute_path(path)) {
> char *slash;
>
> - if (!cf || !cf->path)
> - return error(_("relative config includes must come from files"));
> + if (!cf || !cf->path) {
> + ret = error(_("relative config includes must come from files"));
> + goto cleanup;
> + }
>
> slash = find_last_dir_sep(cf->path);
> if (slash)
> @@ -167,6 +169,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc
> ret = git_config_from_file(git_config_include, path, inc);
> inc->depth--;
> }
> +cleanup:
> strbuf_release(&buf);
> free(expanded);
> return ret;Quite straight-forward. At the point of the new "goto cleanup", the expanded pointer has already been established, so these two calls will release the right resource.
Thanks.
Show 12 quoted lines
> diff --git a/t/t1305-config-include.sh b/t/t1305-config-include.sh > index ccbb116c016..5cde79ef8c4 100755 > --- a/t/t1305-config-include.sh > +++ b/t/t1305-config-include.sh > @@ -1,6 +1,7 @@ > #!/bin/sh > > test_description='test config file include directives' > +TEST_PASSES_SANITIZE_LEAK=true > . ./test-lib.sh > > # Force setup_explicit_git_dir() to run until the end. This is needed