Base autodetection is failing for this case:
if test 257 -gt 3ae; then echo first; else echo second; fi

It is because base for 3ae is recognized by _parse_integer_fixup_radix() as
10. The patch is checking all chars to make sure that they are not 'a' or
up. If they are base needs to be in hex.

Signed-off-by: Michal Simek <[email protected]>
---

 lib/strto.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)

diff --git a/lib/strto.c b/lib/strto.c
index 55ff9f7437d5..14821c87f16d 100644
--- a/lib/strto.c
+++ b/lib/strto.c
@@ -22,9 +22,25 @@ static const char *_parse_integer_fixup_radix(const char *s, 
unsigned int *base)
                                *base = 16;
                        else
                                *base = 8;
-               } else
+               } else {
+                       int i;
+
                        *base = 10;
+
+                       for (i = 0; ; i++) {
+                               char var = s[i];
+
+                               if (var == '\n')
+                                       break;
+
+                               if (var >= 'a') {
+                                       *base = 16;
+                                       break;
+                               }
+                       }
+               }
        }
+
        if (*base == 16 && s[0] == '0' && tolower(s[1]) == 'x')
                s += 2;
        return s;
-- 
2.25.0

Reply via email to