diff options
author | Junio C Hamano <gitster@pobox.com> | 2022-06-09 00:27:50 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-06-09 00:27:50 +0300 |
commit | 596838d2c564f3fea30315d4bd6633c32f70bfed (patch) | |
tree | 1de857a4523314d75eb781a9c5fe043a8b99becc | |
parent | e54793a95afeea1e10de1e5ad7eab914e7416250 (diff) | |
parent | 2acf4cf0010379f10b39eba1fb4e0868a5ba4114 (diff) |
Merge branch 'js/ci-gcc-12-fixes' into maint
Fixes real problems noticed by gcc 12 and works around false
positives.
source: <pull.1238.git.1653351786.gitgitgadget@gmail.com>
* js/ci-gcc-12-fixes:
dir.c: avoid "exceeds maximum object size" error with GCC v12.x
nedmalloc: avoid new compile error
compat/win32/syslog: fix use-after-realloc
-rw-r--r-- | compat/nedmalloc/nedmalloc.c | 1 | ||||
-rw-r--r-- | compat/win32/syslog.c | 2 | ||||
-rw-r--r-- | dir.c | 9 |
3 files changed, 11 insertions, 1 deletions
diff --git a/compat/nedmalloc/nedmalloc.c b/compat/nedmalloc/nedmalloc.c index edb438a777..2c0ace7075 100644 --- a/compat/nedmalloc/nedmalloc.c +++ b/compat/nedmalloc/nedmalloc.c @@ -323,7 +323,6 @@ static NOINLINE void RemoveCacheEntries(nedpool *p, threadcache *tc, unsigned in } static void DestroyCaches(nedpool *p) THROWSPEC { - if(p->caches) { threadcache *tc; int n; diff --git a/compat/win32/syslog.c b/compat/win32/syslog.c index 161978d720..1f8d8934cc 100644 --- a/compat/win32/syslog.c +++ b/compat/win32/syslog.c @@ -43,6 +43,7 @@ void syslog(int priority, const char *fmt, ...) va_end(ap); while ((pos = strstr(str, "%1")) != NULL) { + size_t offset = pos - str; char *oldstr = str; str = realloc(str, st_add(++str_len, 1)); if (!str) { @@ -50,6 +51,7 @@ void syslog(int priority, const char *fmt, ...) warning_errno("realloc failed"); return; } + pos = str + offset; memmove(pos + 2, pos + 1, strlen(pos)); pos[1] = ' '; } @@ -3082,6 +3082,15 @@ char *git_url_basename(const char *repo, int is_bundle, int is_bare) } /* + * 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" + "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 * colon). This check is required such that we do not |