Configuration: added ability to access object members with slashes.
Now URI encoding can be used to escape "/" in the request path: GET /config/listeners/unix:%2Fpath%2Fto%2Fsocket/
This commit is contained in:
@@ -451,3 +451,59 @@ nxt_strvers_match(u_char *version, u_char *prefix, size_t length)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
u_char *
|
||||
nxt_decode_uri(u_char *dst, u_char *src, size_t length)
|
||||
{
|
||||
u_char *end, ch;
|
||||
uint8_t d0, d1;
|
||||
|
||||
static const uint8_t hex[256]
|
||||
nxt_aligned(32) =
|
||||
{
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 16, 16, 16, 16, 16, 16,
|
||||
16, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
|
||||
};
|
||||
|
||||
nxt_prefetch(&hex['0']);
|
||||
|
||||
end = src + length;
|
||||
|
||||
while (src < end) {
|
||||
ch = *src++;
|
||||
|
||||
if (ch == '%') {
|
||||
if (nxt_slow_path(end - src < 2)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
d0 = hex[*src++];
|
||||
d1 = hex[*src++];
|
||||
|
||||
if (nxt_slow_path((d0 | d1) >= 16)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ch = (d0 << 4) + d1;
|
||||
}
|
||||
|
||||
*dst++ = ch;
|
||||
}
|
||||
|
||||
return dst;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user