git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v2 5/7] ls-files: fix a trivial dir_clear() leak

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Oct 14, 2021, 00:15 UTC
Message-ID
<87lf2wh2fu.fsf@evledraar.gmail.com>
In-Reply-To
<xmqqczo8hhq2.fsf@gitster.g>
On Wed, Oct 13 2021, Junio C Hamano wrote:
Show 25 quoted lines
> Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
>
>> -       if (ps_matched) {
>> -               int bad;
>> -               bad = report_path_error(ps_matched, &pathspec);
>> -               if (bad)
>> -                       fprintf(stderr, "Did you forget to 'git add'?\n");
>> -
>> -               return bad ? 1 : 0;
>> +       if (ps_matched && report_path_error(ps_matched, &pathspec)) {
>> +               fprintf(stderr, "Did you forget to 'git add'?\n");
>> +               ret = 1;
>>         }
>>  
>>         dir_clear(&dir);
>>         free(max_prefix);
>> -       return 0;
>> +       return ret;
>>  }
>>
>> Doesn't make much sense, but I can re-roll with it if you feel strongly
>> about it. I think the current version is ready to be picked up.
>
> I do not see where that "doesn't make much sense" comes from.  If it
> does not make sense, I wouldn't have mentioned it.
I meant "I don't think that makes much sense".
Show 6 quoted lines
>> Yeah we should avoid refactoring-while-at-it, but in cases where a patch
>> removes the only reason a nested if/if statement exists, unrolling it
>
> And I do not quite see what "the only reason" is in this case, or
> what it has to do with the restructuring, either.  Care to either
> clarify, or fix the patch, or perhaps both?
I mean that we generally don't write code like:
	if (x) {
		if (y) {
			fprintf(...);
			ret = 1;
		}
	}
And instead write:
	if (x && y) {
		fprintf(...);
		ret = 1;
	}

So aside from the specific change here I thought your objection would also apply to e.g. removing braces from a standalone "if" as it's reduced to a one statement body, which we we generally do.

But reading your upthread:
    [...]the "ah, report_path_error() always returns true" does not
    belong here.

I think the objection might be in folding that in particular into the "if" statement?

The point of this change is that if report_path_error() was non-zero we'd skip the freeing before, but shouldn't.

So any change here would have wanted to fall through the "if", but we need to do the fprintf() if report_path_error returns true.

So I don't really get that "always returns true" comment means in this context. It returns true on error, and dealing with that code branch in relation to the freeing is what this change needs to concern itself with.

Previous: Junio C HamanoNext: Junio C Hamano
Message 22 of 23 in “leak tests: fix "test-tool" & other small leaks”
  1. 0/7 leak tests: fix "test-tool" & other small leaksÆvar Arnfjörð Bjarmason, Oct 6, 2021
  2. 1/7 tests: fix a memory leak in test-prio-queue.cÆvar Arnfjörð Bjarmason, Oct 6, 2021
  3. 2/7 tests: fix a memory leak in test-parse-options.cÆvar Arnfjörð Bjarmason, Oct 6, 2021
  4. Elijah NewrenOct 6, 2021
  5. 3/7 tests: fix a memory leak in test-oidtree.cÆvar Arnfjörð Bjarmason, Oct 6, 2021
  6. 5/7 ls-files: fix a trivial dir_clear() leakÆvar Arnfjörð Bjarmason, Oct 6, 2021
  7. 4/7 tests: fix test-oid-array leak, test in SANITIZE=leakÆvar Arnfjörð Bjarmason, Oct 6, 2021
  8. 6/7 ls-files: add missing string_list_clear()Ævar Arnfjörð Bjarmason, Oct 6, 2021
  9. 7/7 merge: add missing strbuf_release()Ævar Arnfjörð Bjarmason, Oct 6, 2021
  10. Elijah NewrenOct 6, 2021
  11. 0/7 leak tests: fix "test-tool" & other small leaksÆvar Arnfjörð Bjarmason, Oct 7, 2021
  12. 1/7 tests: fix a memory leak in test-prio-queue.cÆvar Arnfjörð Bjarmason, Oct 7, 2021
  13. 2/7 tests: fix a memory leak in test-parse-options.cÆvar Arnfjörð Bjarmason, Oct 7, 2021
  14. 3/7 tests: fix a memory leak in test-oidtree.cÆvar Arnfjörð Bjarmason, Oct 7, 2021
  15. 4/7 tests: fix test-oid-array leak, test in SANITIZE=leakÆvar Arnfjörð Bjarmason, Oct 7, 2021
  16. 7/7 merge: add missing strbuf_release()Ævar Arnfjörð Bjarmason, Oct 7, 2021
  17. 6/7 ls-files: add missing string_list_clear()Ævar Arnfjörð Bjarmason, Oct 7, 2021
  18. 5/7 ls-files: fix a trivial dir_clear() leakÆvar Arnfjörð Bjarmason, Oct 7, 2021
  19. Junio C HamanoOct 7, 2021
  20. Ævar Arnfjörð BjarmasonOct 13, 2021
  21. Junio C HamanoOct 13, 2021
  22. Ævar Arnfjörð BjarmasonOct 14, 2021
  23. Junio C HamanoOct 14, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.