diff mbox series

[hurd,commited] mach: Fix __xpg_strerror_r on in-range but undefined errors [BZ #32350]

Message ID 20241109190136.3220870-1-samuel.thibault@ens-lyon.org
State New
Headers show
Series [hurd,commited] mach: Fix __xpg_strerror_r on in-range but undefined errors [BZ #32350] | expand

Commit Message

Samuel Thibault Nov. 9, 2024, 7:01 p.m. UTC
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
---
 sysdeps/mach/xpg-strerror.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)
diff mbox series

Patch

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);