From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: Re: [PATCH 4/4] dir.c: avoid "exceeds maximum object size" error with GCC v12.x
Date: Tue, 24 May 2022 07:53:20 +0200 [thread overview]
Message-ID: <220524.86k0abxyqa.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <365889ee96e37dc9dcbe60d98880eb256dae90ee.1653351786.git.gitgitgadget@gmail.com>
On Tue, May 24 2022, Johannes Schindelin via GitGitGadget wrote:
> From: Johannes Schindelin <johannes.schindelin@gmx.de>
>
> Technically, the pointer difference `end - start` _could_ be negative,
> and when cast to an (unsigned) `size_t` that would cause problems. In
> this instance, the symptom is:
>
> dir.c: In function 'git_url_basename':
> dir.c:3087:13: error: 'memchr' specified bound [9223372036854775808, 0]
> exceeds maximum object size 9223372036854775807
> [-Werror=stringop-overread]
> CC ewah/bitmap.o
> 3087 | if (memchr(start, '/', end - start) == NULL
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> While it is a bit far-fetched to think that `end` (which is defined as
> `repo + strlen(repo)`) and `start` (which starts at `repo` and never
> steps beyond the NUL terminator) could result in such a negative
> difference, GCC has no way of knowing that.
>
> See also https://gcc.gnu.org/bugzilla//show_bug.cgi?id=85783.
>
> Let's just add a safety check, primarily for GCC's benefit.
>
> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> ---
> dir.c | 9 +++++++++
> 1 file changed, 9 insertions(+)
>
> diff --git a/dir.c b/dir.c
> index 5aa6fbad0b7..ea78f606230 100644
> --- a/dir.c
> +++ b/dir.c
> @@ -3076,6 +3076,15 @@ char *git_url_basename(const char *repo, int is_bundle, int is_bare)
> end--;
> }
>
> + /*
> + * It should not be possible to overflow `ptrdiff_t` by passing in an
> + * insanely long URL, but GCC does not know that and will complain
> + * without this check.
> + */
> + if (end - start < 0)
> + die(_("No directory name could be guessed.\n"
This should start with a lower-case letter, see CodingGuidelines.
> + "Please specify a directory on the command line"));
> +
> /*
> * Strip trailing port number if we've got only a
> * hostname (that is, there is no dir separator but a
next prev parent reply other threads:[~2022-05-24 5:53 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-24 0:23 [PATCH 0/4] ci: fix windows-build with GCC v12.x Johannes Schindelin via GitGitGadget
2022-05-24 0:23 ` [PATCH 1/4] compat/win32/syslog: fix use-after-realloc Johannes Schindelin via GitGitGadget
2022-05-24 12:39 ` Johannes Schindelin
2022-05-24 20:58 ` Junio C Hamano
2022-05-24 0:23 ` [PATCH 2/4] nedmalloc: avoid new compile error Johannes Schindelin via GitGitGadget
2022-05-24 8:00 ` Ævar Arnfjörð Bjarmason
2022-05-24 15:59 ` René Scharfe
2022-05-24 20:46 ` Johannes Schindelin
2022-05-24 21:33 ` Ævar Arnfjörð Bjarmason
2022-05-24 0:23 ` [PATCH 3/4] http.c: avoid danging pointer to local variable `finished` Johannes Schindelin via GitGitGadget
2022-05-24 7:58 ` Ævar Arnfjörð Bjarmason
2022-05-24 20:06 ` Junio C Hamano
2022-05-24 21:15 ` Johannes Schindelin
2022-05-24 21:45 ` Ævar Arnfjörð Bjarmason
2022-05-24 22:38 ` Junio C Hamano
2022-05-25 10:16 ` Johannes Schindelin
2022-05-25 12:48 ` Ævar Arnfjörð Bjarmason
2022-05-24 0:23 ` [PATCH 4/4] dir.c: avoid "exceeds maximum object size" error with GCC v12.x Johannes Schindelin via GitGitGadget
2022-05-24 5:53 ` Ævar Arnfjörð Bjarmason [this message]
2022-05-24 21:05 ` Johannes Schindelin
2022-05-25 13:39 ` Derrick Stolee
2022-05-25 18:27 ` Junio C Hamano
2022-05-24 15:54 ` [PATCH 0/4] ci: fix windows-build " Jeff Hostetler
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=220524.86k0abxyqa.gmgdl@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=johannes.schindelin@gmx.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.