bug-mes
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

hex conversion bug in abtol


From: R. Masters
Subject: hex conversion bug in abtol
Date: Fri, 30 Sep 2022 11:50:08 -0700

Due to a bug in mes/lib/abtol.c, hex number conversions fail for abtol, strtol, strtoul, strtoull, atoi, and abtod.

The variable m is set in order to adjust letter based digits but is not reset back to '0' for decimal digits.

The following patch fixes it:
--- mes-0.24/lib/mes/abtol.c.orig       2022-09-30 17:54:37.828219055 +0000
+++ mes-0.24/lib/mes/abtol.c    2022-09-30 17:55:12.768220259 +0000
@@ -44,6 +44,8 @@
       i = i * base;
       if (s[0] > '9')
         m = 'a' - 10;
+      else
+        m = '0';
       i = i + s[0] - m;
       s = s + 1;
     }

New tests for the problem:
--- mes-0.24/lib/tests/stdlib/70-strtoull.c.orig        2022-09-30 18:33:08.564298693 +0000
+++ mes-0.24/lib/tests/stdlib/70-strtoull.c     2022-09-30 18:33:50.120300125 +0000
@@ -43,5 +43,13 @@
   if (strcmp (p, "zar\n"))
     return 4;
 
+  p = "a2zar\n";
+  n = strtoull (p, (char **) &p, 16);
+  if (n != 162)
+    return 5;
+  eputs (p);
+  if (strcmp (p, "zar\n"))
+    return 6;
+
   return 0;
 }
--- mes-0.24/lib/tests/stdlib/90-strtol.c.orig  2022-09-30 18:33:14.240298888 +0000
+++ mes-0.24/lib/tests/stdlib/90-strtol.c       2022-09-30 18:35:14.820303044 +0000
@@ -28,17 +28,21 @@
   if (strtol ("0x12", 0, 0) != 18)
     1;
 
+  eputs ("0xa2\n");
+  if (strtol ("0xa2", 0, 0) != 162)
+    2;
+
   eputs ("012\n");
   if (strtol ("012", 0, 0) != 10)
-    2;
+    3;
 
   eputs ("-1\n");
   if (strtol ("-1", 0, 0) != -1)
-    3;
+    4;
 
   eputs ("-1\n");
   if (strtoul ("-1", 0, 0) != -1)
-    4;
+    5;
 
   char *p = "16";
   int n = strtol (p, (char **) &p, 0);
@@ -46,7 +50,7 @@
   eputs (p);
   eputs ("\n");
   if (*p != 0)
-    return 5;
+    return 6;
 
   p = "0x12";
   n = strtol (p, (char **) &p, 0);
@@ -54,7 +58,7 @@
   eputs (p);
   eputs ("\n");
   if (*p != 0)
-    return 5;
+    return 7;
 
 
   return 0;


Regards,
Rick Masters


reply via email to

[Prev in Thread] Current Thread [Next in Thread]