git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Toon Claes <toon@iotcl.com>
To: Patrick Steinhardt <ps@pks.im>, git@vger.kernel.org
Cc: "Rubén Justo" <rjusto@gmail.com>, "Jeff King" <peff@peff.net>
Subject: Re: [PATCH v3 00/27] Memory leak fixes (pt.10, final)
Date: Thu, 21 Nov 2024 11:32:17 +0100	[thread overview]
Message-ID: <87mshsswr2.fsf@gitlab.com> (raw)
In-Reply-To: <20241120-b4-pks-leak-fixes-pt10-v3-0-d67f08f45c74@pks.im>

Patrick Steinhardt <ps@pks.im> writes:

> Hi,
>
> this is the last part of my series of memory leak fixes. This series
> goes a bit further than past series:
>
>   - Patches 1 to 16 plug remaining memory leaks exposed by our test
>     suite.
>
>   - Patches 17 to 22 remove the last remaining `UNLEAK()` annotations
>     and ultimately remove the macro itself.
>
>   - Patch 23 works around a bug in the leak sanitizer itself.
>
>   - Patches 24 and 25 drop annotations where leak-free tests pass with
>     the leak sanitizer.
>
>   - Patches 26 and 27 unconditionally enable leak checking in all newly
>     added tests and then drop the `TEST_PASSES_SANITIZE_LEAK`
>     annotation.
>
> So once this series lands, the expectation is that any newly added test
> needs to be leak free by default. We still have an escape hatch in the
> form of the SANITIZE_LEAK prerequisite, but patch authors are expected
> to provide good arguments why their test cannot be made leak free.
>
> Changes in v3:
>
>   - Fix bounds checking in `strvec_splice()`.
>
>   - Rename `pos` to `idx` in `strvec_splice()`.
>
>   - Drop no-op code when finding bisection points with
>     `FIND_BISECT_ALL`.
>
> Link to v1: https://lore.kernel.org/r/cover.1730901926.git.ps@pks.im
> Link to v2: https://lore.kernel.org/r/20241111-b4-pks-leak-fixes-pt10-v2-0-6154bf91f0b0@pks.im
>
> Thanks!
>
> Patrick
>
> [...snip...]
>
> Range-diff versus v2:
>
>  1:  89f354b667 =  1:  08acbe8895 builtin/blame: fix leaking blame entries with `--incremental`
>  2:  e50952aba3 =  2:  49269d747b bisect: fix leaking good/bad terms when reading multipe times
>  3:  c38a4e15b8 =  3:  83cd85b609 bisect: fix leaking string in `handle_bad_merge_base()`
>  4:  d2b48a08c2 =  4:  88a218045c bisect: fix leaking `current_bad_oid`
>  5:  496421e0fe =  5:  1c1f77497f bisect: fix multiple leaks in `bisect_next_all()`
>  6:  aeb9cacf64 =  6:  f02bbfde18 bisect: fix leaking commit list items in `check_merge_base()`
>  7:  a8afd12467 !  7:  6e6d490b8a bisect: fix various cases where we leak commit list items
>     @@ Commit message
>      
>       ## bisect.c ##
>      @@ bisect.c: void find_bisection(struct commit_list **commit_list, int *reaches,
>     - 			free_commit_list(list->next);
>     - 			best = list;
>       			best->next = NULL;
>     -+		} else {
>     -+			for (p = list; p != best; p = next) {
>     -+				next = p->next;
>     -+				free(p);
>     -+			}
>       		}
>       		*reaches = weight(best);
>      +	} else {
>  8:  f503331f08 =  8:  13e2158c23 line-log: fix leak when rewriting commit parents
>  9:  3edb9e0fe9 !  9:  3a9b0fa44a strvec: introduce new `strvec_splice()` function
>     @@ strvec.c: void strvec_pushv(struct strvec *array, const char **items)
>       		strvec_push(array, *items);
>       }
>       
>     -+void strvec_splice(struct strvec *array, size_t pos, size_t len,
>     ++void strvec_splice(struct strvec *array, size_t idx, size_t len,
>      +		   const char **replacement, size_t replacement_len)
>      +{
>     -+	if (pos + len > array->alloc)
>     ++	if (idx + len > array->nr)
>      +		BUG("range outside of array boundary");
>      +	if (replacement_len > len)
>      +		ALLOC_GROW(array->v, array->nr + (replacement_len - len) + 1,
>      +			   array->alloc);
>      +	for (size_t i = 0; i < len; i++)
>     -+		free((char *)array->v[pos + i]);
>     ++		free((char *)array->v[idx + i]);
>      +	if (replacement_len != len) {
>     -+		memmove(array->v + pos + replacement_len, array->v + pos + len,
>     -+			(array->nr - pos - len + 1) * sizeof(char *));
>     ++		memmove(array->v + idx + replacement_len, array->v + idx + len,
>     ++			(array->nr - idx - len + 1) * sizeof(char *));
>      +		array->nr += (replacement_len - len);
>      +	}
>      +	for (size_t i = 0; i < replacement_len; i++)
>     -+		array->v[pos + i] = xstrdup(replacement[i]);
>     ++		array->v[idx + i] = xstrdup(replacement[i]);
>      +}
>      +
>       const char *strvec_replace(struct strvec *array, size_t idx, const char *replacement)
>     @@ strvec.h: void strvec_pushl(struct strvec *, ...);
>       void strvec_pushv(struct strvec *, const char **);
>       
>      +/*
>     -+ * Replace `len` values starting at `pos` with the provided replacement
>     -+ * strings. If `len` is zero this is effectively an insert at the given `pos`.
>     ++ * Replace `len` values starting at `idx` with the provided replacement
>     ++ * strings. If `len` is zero this is effectively an insert at the given `idx`.
>      + * If `replacement_len` is zero this is effectively a delete of `len` items
>     -+ * starting at `pos`.
>     ++ * starting at `idx`.
>      + */
>     -+void strvec_splice(struct strvec *array, size_t pos, size_t len,
>     ++void strvec_splice(struct strvec *array, size_t idx, size_t len,
>      +		   const char **replacement, size_t replacement_len);
>      +
>       /**
> 10:  f4c5b4b029 = 10:  0e30d61ee3 git: refactor alias handling to use a `struct strvec`
> 11:  a30376077d = 11:  9dc3f5da99 git: refactor builtin handling to use a `struct strvec`
> 12:  6fc481018e = 12:  6a7bb2d4ec split-index: fix memory leak in `move_cache_to_base_index()`
> 13:  011ee82856 = 13:  5147a45e70 builtin/sparse-checkout: fix leaking sanitized patterns
> 14:  41c6aa41ba = 14:  1e1f0025e2 help: refactor to not use globals for reading config
> 15:  d2b9042512 = 15:  92fb58121b help: fix leaking `struct cmdnames`
> 16:  75228ba160 = 16:  a8f1cb44f8 help: fix leaking return value from `help_unknown_cmd()`
> 17:  f2da0c4825 = 17:  9e76f20ad5 builtin/help: fix leaks in `check_git_cmd()`
> 18:  fb369114b7 = 18:  2d0fa8a922 builtin/init-db: fix leaking directory paths
> 19:  bf7e34819e = 19:  598e385ad3 builtin/branch: fix leaking sorting options
> 20:  ec0f1d5f44 = 20:  469adc7754 t/helper: fix leaking commit graph in "read-graph" subcommand
> 21:  fad027056e = 21:  fe36f95eee global: drop `UNLEAK()` annotation
> 22:  dc9b641e6a = 22:  3898a90c35 git-compat-util: drop now-unused `UNLEAK()` macro
> 23:  1a1d34e9d3 = 23:  52e17f51cb t5601: work around leak sanitizer issue
> 24:  3d89a0c792 = 24:  972a56f3d5 t: mark some tests as leak free
> 25:  d0925d3731 = 25:  2cad683eab t: remove unneeded !SANITIZE_LEAK prerequisites
> 26:  b9f4007910 = 26:  de43715991 test-lib: unconditionally enable leak checking
> 27:  96313e3e47 = 27:  59637d5fea t: remove TEST_PASSES_SANITIZE_LEAK annotations
>
> ---
> base-commit: b0c643d6a710e2b092902a3941655176b358bfd0
> change-id: 20241111-b4-pks-leak-fixes-pt10-a6fa657f4fac

Range-diff looks good to me, no further comments.

--
Toon

      parent reply	other threads:[~2024-11-21 10:32 UTC|newest]

Thread overview: 117+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-06 15:10 [PATCH 00/26] Memory leak fixes (pt.10, final) Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 01/26] builtin/blame: fix leaking blame entries with `--incremental` Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 02/26] bisect: fix leaking good/bad terms when reading multipe times Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 03/26] bisect: fix leaking string in `handle_bad_merge_base()` Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 04/26] bisect: fix leaking `current_bad_oid` Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 05/26] bisect: fix multiple leaks in `bisect_next_all()` Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 06/26] bisect: fix leaking commit list items in `check_merge_base()` Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 07/26] bisect: fix various cases where we leak commit list items Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 08/26] line-log: fix leak when rewriting commit parents Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 09/26] strvec: introduce new `strvec_splice()` function Patrick Steinhardt
2024-11-10 21:39   ` Rubén Justo
2024-11-11  9:09     ` Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 10/26] git: refactor alias handling to use a `struct strvec` Patrick Steinhardt
2024-11-10 21:41   ` Rubén Justo
2024-11-06 15:10 ` [PATCH 11/26] git: refactor builtin " Patrick Steinhardt
2024-11-06 15:10 ` [PATCH 12/26] split-index: fix memory leak in `move_cache_to_base_index()` Patrick Steinhardt
2024-11-10 21:45   ` Rubén Justo
2024-11-06 15:10 ` [PATCH 13/26] builtin/sparse-checkout: fix leaking sanitized patterns Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 14/26] help: refactor to not use globals for reading config Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 15/26] help: fix leaking `struct cmdnames` Patrick Steinhardt
2024-11-10 21:46   ` Rubén Justo
2024-11-11  9:09     ` Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 16/26] help: fix leaking return value from `help_unknown_cmd()` Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 17/26] builtin/help: fix leaks in `check_git_cmd()` Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 18/26] builtin/init-db: fix leaking directory paths Patrick Steinhardt
2024-11-10 21:47   ` Rubén Justo
2024-11-06 15:11 ` [PATCH 19/26] builtin/branch: fix leaking sorting options Patrick Steinhardt
2024-11-10 21:47   ` Rubén Justo
2024-11-06 15:11 ` [PATCH 20/26] t/helper: fix leaking commit graph in "read-graph" subcommand Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 21/26] git-compat-util: drop `UNLEAK()` annotation Patrick Steinhardt
2024-11-10 21:47   ` Rubén Justo
2024-11-11  9:09     ` Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 22/26] t5601: work around leak sanitizer issue Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 23/26] t: mark some tests as leak free Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 24/26] t: remove unneeded !SANITIZE_LEAK prerequisites Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 25/26] test-lib: unconditionally enable leak checking Patrick Steinhardt
2024-11-06 15:11 ` [PATCH 26/26] t: remove TEST_PASSES_SANITIZE_LEAK annotations Patrick Steinhardt
2024-11-10 21:48 ` [PATCH 00/26] Memory leak fixes (pt.10, final) Rubén Justo
2024-11-11  9:09   ` Patrick Steinhardt
2024-11-11 10:38 ` [PATCH v2 00/27] " Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 01/27] builtin/blame: fix leaking blame entries with `--incremental` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 02/27] bisect: fix leaking good/bad terms when reading multipe times Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 03/27] bisect: fix leaking string in `handle_bad_merge_base()` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 04/27] bisect: fix leaking `current_bad_oid` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 05/27] bisect: fix multiple leaks in `bisect_next_all()` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 06/27] bisect: fix leaking commit list items in `check_merge_base()` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 07/27] bisect: fix various cases where we leak commit list items Patrick Steinhardt
2024-11-20 10:32     ` Toon Claes
2024-11-20 12:41       ` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 08/27] line-log: fix leak when rewriting commit parents Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 09/27] strvec: introduce new `strvec_splice()` function Patrick Steinhardt
2024-11-20  8:37     ` Toon Claes
2024-11-20 12:41       ` Patrick Steinhardt
2024-11-20 23:13         ` Junio C Hamano
2024-11-21  8:11           ` Jeff King
2024-11-21  8:22             ` Jeff King
2024-11-21 10:23             ` Doxygen-styled comments [was: Re: [PATCH v2 09/27] strvec: introduce new `strvec_splice()` function] Toon Claes
2024-11-21 10:32               ` Jeff King
2024-11-11 10:38   ` [PATCH v2 10/27] git: refactor alias handling to use a `struct strvec` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 11/27] git: refactor builtin " Patrick Steinhardt
2024-11-20 10:38     ` Toon Claes
2024-11-11 10:38   ` [PATCH v2 12/27] split-index: fix memory leak in `move_cache_to_base_index()` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 13/27] builtin/sparse-checkout: fix leaking sanitized patterns Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 14/27] help: refactor to not use globals for reading config Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 15/27] help: fix leaking `struct cmdnames` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 16/27] help: fix leaking return value from `help_unknown_cmd()` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 17/27] builtin/help: fix leaks in `check_git_cmd()` Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 18/27] builtin/init-db: fix leaking directory paths Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 19/27] builtin/branch: fix leaking sorting options Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 20/27] t/helper: fix leaking commit graph in "read-graph" subcommand Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 21/27] global: drop `UNLEAK()` annotation Patrick Steinhardt
2024-11-12  8:26     ` Jeff King
2024-11-12  8:53       ` Patrick Steinhardt
2024-11-12  9:03         ` Jeff King
2024-11-11 10:38   ` [PATCH v2 22/27] git-compat-util: drop now-unused `UNLEAK()` macro Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 23/27] t5601: work around leak sanitizer issue Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 24/27] t: mark some tests as leak free Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 25/27] t: remove unneeded !SANITIZE_LEAK prerequisites Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 26/27] test-lib: unconditionally enable leak checking Patrick Steinhardt
2024-11-11 10:38   ` [PATCH v2 27/27] t: remove TEST_PASSES_SANITIZE_LEAK annotations Patrick Steinhardt
2024-11-20 10:40     ` Toon Claes
2024-11-20 12:41       ` Patrick Steinhardt
2024-11-11 23:33   ` [PATCH v2 00/27] Memory leak fixes (pt.10, final) Rubén Justo
2024-11-12  8:06     ` Rubén Justo
2024-11-20 13:39 ` [PATCH v3 " Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 01/27] builtin/blame: fix leaking blame entries with `--incremental` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 02/27] bisect: fix leaking good/bad terms when reading multipe times Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 03/27] bisect: fix leaking string in `handle_bad_merge_base()` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 04/27] bisect: fix leaking `current_bad_oid` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 05/27] bisect: fix multiple leaks in `bisect_next_all()` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 06/27] bisect: fix leaking commit list items in `check_merge_base()` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 07/27] bisect: fix various cases where we leak commit list items Patrick Steinhardt
2024-11-25 11:27     ` Jeff King
2024-11-25 12:38       ` Patrick Steinhardt
2024-11-25 13:17         ` Jeff King
2024-11-25 14:08           ` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 08/27] line-log: fix leak when rewriting commit parents Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 09/27] strvec: introduce new `strvec_splice()` function Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 10/27] git: refactor alias handling to use a `struct strvec` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 11/27] git: refactor builtin " Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 12/27] split-index: fix memory leak in `move_cache_to_base_index()` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 13/27] builtin/sparse-checkout: fix leaking sanitized patterns Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 14/27] help: refactor to not use globals for reading config Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 15/27] help: fix leaking `struct cmdnames` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 16/27] help: fix leaking return value from `help_unknown_cmd()` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 17/27] builtin/help: fix leaks in `check_git_cmd()` Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 18/27] builtin/init-db: fix leaking directory paths Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 19/27] builtin/branch: fix leaking sorting options Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 20/27] t/helper: fix leaking commit graph in "read-graph" subcommand Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 21/27] global: drop `UNLEAK()` annotation Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 22/27] git-compat-util: drop now-unused `UNLEAK()` macro Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 23/27] t5601: work around leak sanitizer issue Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 24/27] t: mark some tests as leak free Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 25/27] t: remove unneeded !SANITIZE_LEAK prerequisites Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 26/27] test-lib: unconditionally enable leak checking Patrick Steinhardt
2024-11-20 13:39   ` [PATCH v3 27/27] t: remove TEST_PASSES_SANITIZE_LEAK annotations Patrick Steinhardt
2024-11-21 10:32   ` Toon Claes [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87mshsswr2.fsf@gitlab.com \
    --to=toon@iotcl.com \
    --cc=git@vger.kernel.org \
    --cc=peff@peff.net \
    --cc=ps@pks.im \
    --cc=rjusto@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).