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

Re: [PATCH v2] diff: handle NULL filespecs in run_external_diff

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 6, 2020, 19:18 UTC
Message-ID
<xmqqimaifg5m.fsf@gitster.c.googlers.com>
In-Reply-To
<a0513d6f-1f69-683d-d6c5-75b17b8b6890@theori.io>
Jinoh Kang <luke1337@theori.io> writes:
> However, I humbly opine that the free() semantics do not apply to
> `diff_free_filespec_data`; rather, I prefer to see it as a function
> that simply transitions a diff_filespec from one state to another.

The reason why you prefer is unclear, but let's suppress puzzlement and read on.

> I would put the blame on its name, since "data" feels too generic
> and makes the function sound like freeing the filespec _itself_.
> diff_filespec carries a lot of other things besides just `data`
> and `cnt_data`.

It frees resources held by its content data without freeing the shell. "struct diff_filespec" has a handful of pointer fields, but data and cnt_data are the only allocated fields, no?

> I was unable to find any callsites that explicitly check for
> NULL-ness _immediately_ before calling diff_free_filespec_data.

OK, so a change to make diff_free_filespec_data() more cautious does *not* help existing code; it changes the (so far) wrong assumption made by 3aef54e8 (diff: munmap() file contents before running external diff, 2019-07-11) that calling it with NULL was a safe thing to do---after such a change, the assumption two calls added by the commit makes become valid.

I dunno. I am OK with either direction, but it feels to me that making the helper more cautious would help us avoid similar mistakes in the future. Dscho, what do you think?

Thanks.
Previous: Junio C Hamano
Message 15 of 15 in “diff: handle NULL filespecs in run_external_diff”
  1. diff: handle NULL filespecs in run_external_diffJinoh Kang, Nov 6, 2020
  2. diff: make diff_free_filespec_data accept NULLJinoh Kang, Nov 6, 2020
  3. Johannes SchindelinNov 10, 2020
  4. Jinoh KangNov 10, 2020
  5. Jinoh KangNov 10, 2020
  6. Junio C HamanoNov 10, 2020
  7. diff: make diff_free_filespec_data accept NULLJinoh Kang, Nov 10, 2020
  8. Johannes SchindelinNov 10, 2020
  9. Jinoh KangNov 11, 2020
  10. Johannes SchindelinNov 11, 2020
  11. Junio C HamanoNov 10, 2020
  12. diff: make diff_free_filespec_data accept NULLJinoh Kang, Nov 11, 2020
  13. Johannes SchindelinNov 11, 2020
  14. Junio C HamanoNov 11, 2020
  15. Junio C HamanoNov 6, 2020

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.