cp = njs_utf8_decode(&ctx, start, end);
if (njs_fast_path(cp != '%')) {
- return expect_percent ? 0xFFFFFFFF: cp;
+ return expect_percent ? NJS_UNICODE_ERROR : cp;
}
p = *start;
if (njs_slow_path((p + 1) >= end)) {
- return 0xFFFFFFFF;
+ return NJS_UNICODE_ERROR;
}
d0 = hex[*p++];
if (njs_slow_path(d0 < 0)) {
- return 0xFFFFFFFF;
+ return NJS_UNICODE_ERROR;
}
d1 = hex[*p++];
if (njs_slow_path(d1 < 0)) {
- return 0xFFFFFFFF;
+ return NJS_UNICODE_ERROR;
}
*start += 2;
+
return (d0 << 4) + d1;
}
while (src < end) {
percent = (src[0] == '%');
cp = njs_string_decode_uri_cp(hex, &src, end, 0);
- if (njs_slow_path(cp == 0xFFFFFFFF)) {
+ if (njs_slow_path(cp > NJS_UNICODE_MAX_CODEPOINT)) {
goto uri_error;
}
for (i = 1; i < n; i++) {
cp = njs_string_decode_uri_cp(hex, &src, end, 1);
- if (njs_slow_path(cp == 0xFFFFFFFF)) {
+ if (njs_slow_path(cp > NJS_UNICODE_MAX_CODEPOINT)) {
goto uri_error;
}
{ njs_str("decodeURI('%D0%B0%D0%B1%D0%B2').length"),
njs_str("3")},
+ { njs_str("decodeURI(String.bytesFrom([0x80,0x80]))"),
+ njs_str("URIError: malformed URI")},
+
{ njs_str("["
" '%',"
" '%0',"