From: Samuel Thibault Date: Sat, 9 Nov 2024 18:54:08 +0000 (+0100) Subject: mach: Fix __xpg_strerror_r on in-range but undefined errors [BZ #32350] X-Git-Tag: glibc-2.41~503 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d2e65aa7d6a6434672abcaecd61877bfa78eeb1d;p=thirdparty%2Fglibc.git mach: Fix __xpg_strerror_r on in-range but undefined errors [BZ #32350] For instance, 1073741906 leads to system 16, subsystem 0 and code 82, which is in range (max_code is 122), but not defined. Return EINVAL in that case, like --- diff --git a/sysdeps/mach/xpg-strerror.c b/sysdeps/mach/xpg-strerror.c index f8c65f8124..5e0e5a41d7 100644 --- a/sysdeps/mach/xpg-strerror.c +++ b/sysdeps/mach/xpg-strerror.c @@ -62,9 +62,19 @@ __xpg_strerror_r (int errnum, char *buf, size_t buflen) if (sub >= es->max_sub) estr = (const char *) es->bad_sub; else if (code >= es->subsystem[sub].max_code) - return EINVAL; + { + __snprintf (buf, buflen, "%s%d", _("Unknown error code: "), code); + return EINVAL; + } else - estr = (const char *) _(es->subsystem[sub].codes[code]); + { + estr = (const char *) _(es->subsystem[sub].codes[code]); + if (estr == NULL) + { + __snprintf (buf, buflen, "%s%d", _("Unknown error code: "), code); + return EINVAL; + } + } size_t estrlen = strlen (estr);