uri: use nibble2hex() instead of isxdigit(3) to check valid hex digits

This commit is contained in:
Craig Barnes 2021-01-04 05:25:14 +00:00 committed by Daniel Eklöf
parent 1004387223
commit f22d4e9587
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

10
uri.c
View file

@ -2,7 +2,6 @@
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <limits.h>
#include <unistd.h>
#include <assert.h>
@ -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;