libbb: do not misinterpret 0x10-0x19 chars in "\xNNN" too
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 29 Nov 2018 12:15:57 +0000 (13:15 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 29 Nov 2018 12:16:15 +0000 (13:16 +0100)
function                                             old     new   delta
bb_process_escape_sequence                           141     151     +10

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
libbb/process_escape_sequence.c

index 11adbfceacf9d3e989e0d478cfb76248bec2b9f4..13022b83eea5428a8c999f549b08486e4bf5a144 100644 (file)
@@ -37,17 +37,15 @@ char FAST_FUNC bb_process_escape_sequence(const char **ptr)
         * We treat \2 as a valid octal escape sequence. */
        do {
                unsigned r;
-#if !WANT_HEX_ESCAPES
                unsigned d = (unsigned char)(*q) - '0';
-#else
-               unsigned d = (unsigned char)_tolower(*q) - '0';
+#if WANT_HEX_ESCAPES
                if (d >= 10) {
-                       //d += ('0' - 'a' + 10);
-                       /* The above would maps 'A'-'F' and 'a'-'f' to 10-15,
+                       d = (unsigned char)_tolower(*q) - 'a';
+                       //d += 10;
+                       /* The above would map 'A'-'F' and 'a'-'f' to 10-15,
                         * however, some chars like '@' would map to 9 < base.
                         * Do not allow that, map invalid chars to N > base:
                         */
-                       d += ('0' - 'a');
                        if ((int)d >= 0)
                                d += 10;
                }