Welcome! Log In Create A New Profile

Advanced

[njs] Unicode code point parsing optimization.

May 29, 2017 01:10AM
details: http://hg.nginx.org/njs/rev/7f1f3dcb278f
branches:
changeset: 344:7f1f3dcb278f
user: Igor Sysoev <igor@sysoev.ru>
date: Sat May 27 18:02:09 2017 +0300
description:
Unicode code point parsing optimization.

diffstat:

njs/njs_parser.c | 45 ++++++++++++++++++++++++---------------------
1 files changed, 24 insertions(+), 21 deletions(-)

diffs (93 lines):

diff -r 7156ba123eae -r 7f1f3dcb278f njs/njs_parser.c
--- a/njs/njs_parser.c Fri May 26 20:10:22 2017 +0300
+++ b/njs/njs_parser.c Sat May 27 18:02:09 2017 +0300
@@ -2303,7 +2303,7 @@ njs_parser_escape_string_create(njs_vm_t
njs_value_t *value)
{
u_char c, *p, *start, *dst, *src, *end, *hex_end;
- size_t size, length, hex_length, skip;
+ size_t size, length, hex_length;
int64_t u;

start = NULL;
@@ -2334,35 +2334,25 @@ njs_parser_escape_string_create(njs_vm_t
switch (c) {

case 'u':
- skip = 0;
hex_length = 4;
-
/*
* A character after "u" can be safely tested here
* because there is always a closing quote at the
* end of string: ...\u".
*/
- if (*src == '{') {
- hex_length = 0;
- src++;
-
- for (p = src; p < end && *p != '}'; p++) {
- hex_length++;
- }
-
- if (hex_length == 0 || hex_length > 6) {
- goto invalid;
- }
-
- skip = 1;
+ if (*src != '{') {
+ goto hex_length_test;
}

+ src++;
+ hex_length = 0;
+ hex_end = end;
+
goto hex;

case 'x':
- skip = 0;
hex_length = 2;
- goto hex;
+ goto hex_length_test;

case '0':
c = '\0';
@@ -2421,7 +2411,7 @@ njs_parser_escape_string_create(njs_vm_t

continue;

- hex:
+ hex_length_test:

hex_end = src + hex_length;

@@ -2429,13 +2419,26 @@ njs_parser_escape_string_create(njs_vm_t
goto invalid;
}

+ hex:
+
+ p = src;
u = njs_number_radix_parse(&src, hex_end, 16);

- if (nxt_slow_path(src != hex_end)) {
+ if (nxt_slow_path(u < 0)) {
goto invalid;
}

- src += skip;
+ if (hex_length != 0) {
+ if (src != hex_end) {
+ goto invalid;
+ }
+
+ } else {
+ if ((src - p) > 6 || src == end || *(++src) == '}') {
+ goto invalid;
+ }
+ }
+
size += nxt_utf8_size(u);
length++;

_______________________________________________
nginx-devel mailing list
nginx-devel@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-devel
Subject Author Views Posted

[njs] Unicode code point parsing optimization.

Igor Sysoev 797 May 29, 2017 01:10AM



Sorry, you do not have permission to post/reply in this forum.

Online Users

Guests: 66
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready