continue;
}
+ if (u + 1 == last) {
+ *len = u - utf16;
+ break;
+ }
+
n = ngx_utf8_decode(&p, 4);
- if (n > 0xffff) {
+ if (n > 0x10ffff) {
ngx_set_errno(NGX_EILSEQ);
return NULL;
}
+ if (n > 0xffff) {
+ n -= 0x10000;
+ *u++ = (u_short) (0xd800 + (n >> 10));
+ *u++ = (u_short) (0xdc00 + (n & 0x03ff));
+ continue;
+ }
+
*u++ = (u_short) n;
}
n = ngx_utf8_decode(&p, 4);
- if (n > 0xffff) {
+ if (n > 0x10ffff) {
free(utf16);
ngx_set_errno(NGX_EILSEQ);
return NULL;
}
+ if (n > 0xffff) {
+ n -= 0x10000;
+ *u++ = (u_short) (0xd800 + (n >> 10));
+ *u++ = (u_short) (0xdc00 + (n & 0x03ff));
+ continue;
+ }
+
*u++ = (u_short) n;
}