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

Re: [PATCH 21/22] merge-ort: fix two leaks when handling directory rename modifications

From
Elijah Newren <newren@gmail.com>
Date
Sep 5, 2024, 02:01 UTC
Message-ID
<CABPp-BHAnAfyqfRiMg7Xr0DyAqP0CGgT_XOA=tp42+T-knCReg@mail.gmail.com>
In-Reply-To
<xmqq5xrb6naw.fsf@gitster.g>
On Wed, Sep 4, 2024 at 3:56 PM Junio C Hamano <gitster@pobox.com> wrote:
Show 14 quoted lines
>
> Patrick Steinhardt <ps@pks.im> writes:
>
> > There are two leaks in `apply_directory_rename_modifications()`:
> >
> >   - We do not release the `dirs_to_insert` string list.
> >
> >   - We do not release some `conflict_info` we put into the
> >     `opt->priv->paths` string map.
> >
> > The former is trivial to fix. The latter is a bit less straight forward:
> > the `util` pointer of the string map may sometimes point to data that
> > has been allocated via `CALLOC()`, while at other times it may point to
> > data that has been allocated via a `mem_pool`.
Oops.
> > It very much seems like an oversight that we didn't also allocate the
> > conflict info in this code path via the memory pool, though.
Yep.
Show 45 quoted lines
> > So let's fix that, which will also plug the memory leak for us.
> >
> > Signed-off-by: Patrick Steinhardt <ps@pks.im>
> > ---
>
> May be nice if we can hear from the original author and the area
> expert.
>
> >  merge-ort.c                         | 4 +++-
> >  t/t6423-merge-rename-directories.sh | 1 +
> >  2 files changed, 4 insertions(+), 1 deletion(-)
> >
> > diff --git a/merge-ort.c b/merge-ort.c
> > index 3752c7e595d..0ed3cd06b1a 100644
> > --- a/merge-ort.c
> > +++ b/merge-ort.c
> > @@ -2710,7 +2710,7 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
> >               struct conflict_info *dir_ci;
> >               char *cur_dir = dirs_to_insert.items[i].string;
> >
> > -             CALLOC_ARRAY(dir_ci, 1);
> > +             dir_ci = mem_pool_calloc(&opt->priv->pool, 1, sizeof(*dir_ci));
> >
> >               dir_ci->merged.directory_name = parent_name;
> >               len = strlen(parent_name);
> > @@ -2838,6 +2838,8 @@ static void apply_directory_rename_modifications(struct merge_options *opt,
> >        * Finally, record the new location.
> >        */
> >       pair->two->path = new_path;
> > +
> > +     string_list_clear(&dirs_to_insert, 0);
> >  }
> >
> >  /*** Function Grouping: functions related to regular rename detection ***/
> > diff --git a/t/t6423-merge-rename-directories.sh b/t/t6423-merge-rename-directories.sh
> > index 88d1cf2cde9..4aaaf38be68 100755
> > --- a/t/t6423-merge-rename-directories.sh
> > +++ b/t/t6423-merge-rename-directories.sh
> > @@ -25,6 +25,7 @@ test_description="recursive merge with directory renames"
> >  #                     underscore notation is to differentiate different
> >  #                     files that might be renamed into each other's paths.)
> >
> > +TEST_PASSES_SANITIZE_LEAK=true
> >  . ./test-lib.sh
> >  . "$TEST_DIRECTORY"/lib-merge.sh
Looks good to me; thanks for fixing up my bugs.
Reviewed-by: Elijah Newren <newren@gmail.com>
Previous: Junio C HamanoNext: Patrick Steinhardt
Message 43 of 70 in “Memory leak fixes (pt.6)”
  1. 00/22 Memory leak fixes (pt.6)Patrick Steinhardt, Aug 26, 2024
  2. 01/22 t/test-lib: allow skipping leak checks for passing testsPatrick Steinhardt, Aug 26, 2024
  3. Junio C HamanoAug 27, 2024
  4. Toon claesAug 29, 2024
  5. Patrick SteinhardtAug 30, 2024
  6. 02/22 fetch-pack: fix memory leaks on fetch negotiationPatrick Steinhardt, Aug 26, 2024
  7. 03/22 send-pack: fix leaking common object IDsPatrick Steinhardt, Aug 26, 2024
  8. 04/22 builtin/push: fix leaking refspec query resultPatrick Steinhardt, Aug 26, 2024
  9. Junio C HamanoAug 30, 2024
  10. Patrick SteinhardtSep 2, 2024
  11. 05/22 upload-pack: fix leaking child process data on reachability checksPatrick Steinhardt, Aug 26, 2024
  12. Junio C HamanoAug 30, 2024
  13. 06/22 submodule: fix leaking fetch task dataPatrick Steinhardt, Aug 26, 2024
  14. 07/22 builtin/submodule--helper: fix leaking refs on push-checkPatrick Steinhardt, Aug 26, 2024
  15. 08/22 remote: fix leaking tracking refsPatrick Steinhardt, Aug 26, 2024
  16. Junio C HamanoSep 4, 2024
  17. 09/22 remote: fix leak in reachability check of a remote-tracking refPatrick Steinhardt, Aug 26, 2024
  18. 10/22 send-pack: fix leaking push cert noncePatrick Steinhardt, Aug 26, 2024
  19. Junio C HamanoSep 4, 2024
  20. 11/22 gpg-interface: fix misdesigned signing key interfacesPatrick Steinhardt, Aug 26, 2024
  21. Junio C HamanoSep 4, 2024
  22. 12/22 object: clear grafts when clearing parsed object poolPatrick Steinhardt, Aug 26, 2024
  23. 13/22 shallow: free grafts when unregistering themPatrick Steinhardt, Aug 26, 2024
  24. 14/22 shallow: fix leaking members of `struct shallow_info`Patrick Steinhardt, Aug 26, 2024
  25. Toon claesAug 29, 2024
  26. Junio C HamanoAug 29, 2024
  27. Patrick SteinhardtAug 30, 2024
  28. 15/22 negotiator/skipping: fix leaking commit entriesPatrick Steinhardt, Aug 26, 2024
  29. Calvin WanAug 28, 2024
  30. Josh SteadmonAug 28, 2024
  31. Patrick SteinhardtAug 29, 2024
  32. Calvin WanAug 29, 2024
  33. 16/22 builtin/repack: fix leaking line buffer when packing promisorsPatrick Steinhardt, Aug 26, 2024
  34. Junio C HamanoSep 4, 2024
  35. 17/22 builtin/pack-objects: plug leaking list of keep-packsPatrick Steinhardt, Aug 26, 2024
  36. 18/22 builtin/grep: fix leaking object contextPatrick Steinhardt, Aug 26, 2024
  37. Junio C HamanoSep 4, 2024
  38. 19/22 builtin/fmt-merge-msg: fix leaking buffersPatrick Steinhardt, Aug 26, 2024
  39. 20/22 match-trees: fix leaking prefixes in `shift_tree()`Patrick Steinhardt, Aug 26, 2024
  40. Junio C HamanoSep 4, 2024
  41. 21/22 merge-ort: fix two leaks when handling directory rename modificationsPatrick Steinhardt, Aug 26, 2024
  42. Junio C HamanoSep 4, 2024
  43. Elijah NewrenSep 5, 2024
  44. 22/22 builtin/repack: fix leaking keep-pack listPatrick Steinhardt, Aug 26, 2024
  45. Junio C HamanoSep 4, 2024
  46. 00/22 Memory leak fixes (pt.6)Patrick Steinhardt, Sep 5, 2024
  47. 01/22 t/test-lib: allow skipping leak checks for passing testsPatrick Steinhardt, Sep 5, 2024
  48. 02/22 fetch-pack: fix memory leaks on fetch negotiationPatrick Steinhardt, Sep 5, 2024
  49. 03/22 send-pack: fix leaking common object IDsPatrick Steinhardt, Sep 5, 2024
  50. 04/22 builtin/push: fix leaking refspec query resultPatrick Steinhardt, Sep 5, 2024
  51. 05/22 upload-pack: fix leaking child process data on reachability checksPatrick Steinhardt, Sep 5, 2024
  52. 06/22 submodule: fix leaking fetch task dataPatrick Steinhardt, Sep 5, 2024
  53. 07/22 builtin/submodule--helper: fix leaking refs on push-checkPatrick Steinhardt, Sep 5, 2024
  54. 08/22 remote: fix leaking tracking refsPatrick Steinhardt, Sep 5, 2024
  55. 09/22 remote: fix leak in reachability check of a remote-tracking refPatrick Steinhardt, Sep 5, 2024
  56. 10/22 send-pack: fix leaking push cert noncePatrick Steinhardt, Sep 5, 2024
  57. 11/22 gpg-interface: fix misdesigned signing key interfacesPatrick Steinhardt, Sep 5, 2024
  58. 12/22 object: clear grafts when clearing parsed object poolPatrick Steinhardt, Sep 5, 2024
  59. 13/22 shallow: free grafts when unregistering themPatrick Steinhardt, Sep 5, 2024
  60. 14/22 shallow: fix leaking members of `struct shallow_info`Patrick Steinhardt, Sep 5, 2024
  61. 15/22 negotiator/skipping: fix leaking commit entriesPatrick Steinhardt, Sep 5, 2024
  62. 16/22 builtin/repack: fix leaking line buffer when packing promisorsPatrick Steinhardt, Sep 5, 2024
  63. 17/22 builtin/pack-objects: plug leaking list of keep-packsPatrick Steinhardt, Sep 5, 2024
  64. 18/22 builtin/grep: fix leaking object contextPatrick Steinhardt, Sep 5, 2024
  65. 19/22 builtin/fmt-merge-msg: fix leaking buffersPatrick Steinhardt, Sep 5, 2024
  66. 20/22 match-trees: fix leaking prefixes in `shift_tree()`Patrick Steinhardt, Sep 5, 2024
  67. 21/22 merge-ort: fix two leaks when handling directory rename modificationsPatrick Steinhardt, Sep 5, 2024
  68. 22/22 builtin/repack: fix leaking keep-pack listPatrick Steinhardt, Sep 5, 2024
  69. Junio C HamanoSep 8, 2024
  70. Junio C HamanoSep 12, 2024

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.