diff --git a/uri.c b/uri.c index 31bbc7b6..57852f1b 100644 --- a/uri.c +++ b/uri.c @@ -2,7 +2,6 @@ #include #include -#include #include #include #include @@ -12,6 +11,10 @@ #include "log.h" #include "xmalloc.h" +enum { + HEX_DIGIT_INVALID = 16 +}; + static uint8_t nibble2hex(char c) { @@ -27,8 +30,7 @@ nibble2hex(char c) return c - 'A' + 10; } - assert(false); - return 0; + return HEX_DIGIT_INVALID; } bool @@ -199,7 +201,7 @@ uri_parse(const char *uri, size_t len, encoded_len -= prefix_len; decoded_len += prefix_len; - if (isxdigit(next[1]) && isxdigit(next[2])) { + if (nibble2hex(next[1]) <= 15 && nibble2hex(next[2]) <= 15) { *p++ = nibble2hex(next[1]) << 4 | nibble2hex(next[2]); decoded_len++; encoded_len -= 3;