Coverage Report

Created: 2026-10-28 06:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/php-src/ext/json/json_scanner.c
Line
Count
Source
1
/* Generated by re2c 3.1 */
2
/*
3
  +----------------------------------------------------------------------+
4
  | Copyright © The PHP Group and Contributors.                          |
5
  +----------------------------------------------------------------------+
6
  | This source file is subject to the Modified BSD License that is      |
7
  | bundled with this package in the file LICENSE, and is available      |
8
  | through the World Wide Web at <https://www.php.net/license/>.        |
9
  |                                                                      |
10
  | SPDX-License-Identifier: BSD-3-Clause                                |
11
  +----------------------------------------------------------------------+
12
  | Author: Jakub Zelenka <bukka@php.net>                                |
13
  +----------------------------------------------------------------------+
14
*/
15
16
#include "php.h"
17
#include "php_json_scanner.h"
18
#include "php_json_scanner_defs.h"
19
#include "php_json_parser.h"
20
#include "json_parser.tab.h"
21
22
121M
#define YYCTYPE     php_json_ctype
23
1.45G
#define YYCURSOR    s->cursor
24
#define YYLIMIT     s->limit
25
559M
#define YYMARKER    s->marker
26
#define YYCTXMARKER s->ctxmarker
27
28
243M
#define YYGETCONDITION()        s->state
29
385k
#define YYSETCONDITION(yystate) s->state = yystate
30
31
#define YYFILL(n)
32
33
342k
#define PHP_JSON_CONDITION_SET(condition) YYSETCONDITION(yyc##condition)
34
333M
#define PHP_JSON_CONDITION_GOTO(condition) goto yyc_##condition
35
#define PHP_JSON_CONDITION_SET_AND_GOTO(condition) \
36
156k
  PHP_JSON_CONDITION_SET(condition); \
37
156k
  PHP_JSON_CONDITION_GOTO(condition)
38
#define PHP_JSON_CONDITION_GOTO_STR_P2() \
39
174k
  do { \
40
174k
    if (s->utf8_invalid) { \
41
80.8k
      PHP_JSON_CONDITION_GOTO(STR_P2_BIN); \
42
93.4k
    } else { \
43
93.4k
      PHP_JSON_CONDITION_GOTO(STR_P2_UTF); \
44
93.4k
    } \
45
174k
  } while(0)
46
47
48
4.90M
#define PHP_JSON_SCANNER_COPY_ESC() php_json_scanner_copy_string(s, 0)
49
91.0k
#define PHP_JSON_SCANNER_COPY_UTF() php_json_scanner_copy_string(s, 5)
50
15.9k
#define PHP_JSON_SCANNER_COPY_UTF_SP() php_json_scanner_copy_string(s, 11)
51
52
22.3M
#define PHP_JSON_INT_MAX_LENGTH (MAX_LENGTH_OF_LONG - 1)
53
54
22.3M
#define PHP_JSON_TOKEN_LENGTH() ((size_t) (s->cursor - s->token))
55
56
static void php_json_scanner_copy_string(php_json_scanner *s, size_t esc_size)
57
5.01M
{
58
5.01M
  size_t len = (size_t)(s->cursor - s->str_start - esc_size - 1);
59
5.01M
  if (len) {
60
108k
    memcpy(s->pstr, s->str_start, len);
61
108k
    s->pstr += len;
62
108k
  }
63
5.01M
}
64
65
static int php_json_hex_to_int(unsigned char code)
66
386k
{
67
386k
  if (code >= '0' && code <= '9') {
68
184k
    return code - '0';
69
202k
  } else if (code >= 'A' && code <= 'F') {
70
135k
    return code - ('A' - 10);
71
135k
  } else if (code >= 'a' && code <= 'f') {
72
66.7k
    return code - ('a' - 10);
73
66.7k
  } else {
74
    /* this should never happened (just to suppress compiler warning) */
75
0
    return -1;
76
0
  }
77
386k
}
78
79
static int php_json_ucs2_to_int_ex(php_json_scanner *s, int size, int start)
80
122k
{
81
122k
  int i, code = 0;
82
122k
  php_json_ctype *pc = s->cursor - start;
83
509k
  for (i = 0; i < size; i++) {
84
386k
    code |= php_json_hex_to_int(*(pc--)) << (i * 4);
85
386k
  }
86
122k
  return code;
87
122k
}
88
89
static int php_json_ucs2_to_int(php_json_scanner *s, int size)
90
107k
{
91
107k
  return php_json_ucs2_to_int_ex(s, size, 1);
92
107k
}
93
94
void php_json_scanner_init(php_json_scanner *s, const char *str, size_t str_len, int options)
95
93.5k
{
96
93.5k
  s->cursor = (php_json_ctype *) str;
97
93.5k
  s->limit = (php_json_ctype *) str + str_len;
98
93.5k
  s->options = options;
99
93.5k
  s->line = 1;
100
93.5k
  s->line_start = (php_json_ctype *) str;
101
93.5k
  PHP_JSON_CONDITION_SET(JS);
102
93.5k
}
103
104
int php_json_scan(php_json_scanner *s)
105
121M
{
106
121M
  ZVAL_NULL(&s->value);
107
108
121M
std:
109
121M
  s->token = s->cursor;
110
111
112
121M
  {
113
121M
    YYCTYPE yych;
114
121M
    unsigned int yyaccept = 0;
115
121M
    static const unsigned char yybm_JS[] = {
116
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
117
121M
        0,  64,   0,   0,   0,  64,   0,   0, 
118
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
119
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
120
121M
       64,   0,   0,   0,   0,   0,   0,   0, 
121
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
122
121M
      128, 128, 128, 128, 128, 128, 128, 128, 
123
121M
      128, 128,   0,   0,   0,   0,   0,   0, 
124
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
125
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
126
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
127
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
128
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
129
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
130
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
131
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
132
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
133
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
134
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
135
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
136
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
137
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
138
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
139
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
140
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
141
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
142
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
143
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
144
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
145
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
146
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
147
121M
        0,   0,   0,   0,   0,   0,   0,   0, 
148
121M
    };
149
121M
    if (YYGETCONDITION() < 2) {
150
121M
      if (YYGETCONDITION() < 1) {
151
121M
        goto yyc_JS;
152
121M
      } else {
153
0
        goto yyc_STR_P1;
154
0
      }
155
121M
    } else {
156
0
      if (YYGETCONDITION() < 3) {
157
0
        goto yyc_STR_P2_BIN;
158
0
      } else {
159
0
        goto yyc_STR_P2_UTF;
160
0
      }
161
0
    }
162
/* *********************************** */
163
121M
yyc_JS:
164
121M
    yych = *YYCURSOR;
165
121M
    if (yych <= ']') {
166
70.6M
      if (yych <= '"') {
167
204k
        if (yych <= '\f') {
168
45.1k
          if (yych <= 0x08) {
169
43.7k
            if (yych >= 0x01) goto yy1;
170
43.7k
          } else {
171
1.38k
            if (yych <= '\t') goto yy2;
172
979
            if (yych <= '\n') goto yy4;
173
35
            goto yy1;
174
979
          }
175
159k
        } else {
176
159k
          if (yych <= 0x1F) {
177
1.22k
            if (yych <= '\r') goto yy5;
178
235
            goto yy1;
179
158k
          } else {
180
158k
            if (yych <= ' ') goto yy2;
181
156k
            if (yych <= '!') goto yy6;
182
156k
            goto yy8;
183
156k
          }
184
159k
        }
185
70.4M
      } else {
186
70.4M
        if (yych <= '0') {
187
67.6M
          if (yych <= ',') {
188
47.8M
            if (yych <= '+') goto yy6;
189
47.8M
            goto yy9;
190
47.8M
          } else {
191
19.8M
            if (yych <= '-') goto yy10;
192
19.8M
            if (yych <= '/') goto yy6;
193
19.8M
            goto yy11;
194
19.8M
          }
195
67.6M
        } else {
196
2.79M
          if (yych <= 'Z') {
197
2.76M
            if (yych <= '9') goto yy13;
198
126k
            if (yych <= ':') goto yy14;
199
814
            goto yy6;
200
126k
          } else {
201
27.6k
            if (yych <= '[') goto yy15;
202
7.67k
            if (yych <= '\\') goto yy6;
203
7.46k
            goto yy16;
204
7.67k
          }
205
2.79M
        }
206
70.4M
      }
207
70.6M
    } else {
208
51.0M
      if (yych <= '}') {
209
51.0M
        if (yych <= 's') {
210
2.19k
          if (yych <= 'f') {
211
1.35k
            if (yych <= 'e') goto yy6;
212
731
            goto yy17;
213
1.35k
          } else {
214
841
            if (yych == 'n') goto yy18;
215
137
            goto yy6;
216
841
          }
217
51.0M
        } else {
218
51.0M
          if (yych <= 'z') {
219
769
            if (yych <= 't') goto yy19;
220
129
            goto yy6;
221
51.0M
          } else {
222
51.0M
            if (yych <= '{') goto yy20;
223
25.4M
            if (yych <= '|') goto yy6;
224
25.4M
            goto yy21;
225
25.4M
          }
226
51.0M
        }
227
51.0M
      } else {
228
3.37k
        if (yych <= 0xEC) {
229
1.82k
          if (yych <= 0xC1) {
230
562
            if (yych <= 0x7F) goto yy6;
231
527
            goto yy22;
232
1.26k
          } else {
233
1.26k
            if (yych <= 0xDF) goto yy24;
234
732
            if (yych <= 0xE0) goto yy25;
235
420
            goto yy26;
236
732
          }
237
1.82k
        } else {
238
1.55k
          if (yych <= 0xF0) {
239
739
            if (yych <= 0xED) goto yy27;
240
523
            if (yych <= 0xEF) goto yy26;
241
416
            goto yy28;
242
811
          } else {
243
811
            if (yych <= 0xF3) goto yy29;
244
387
            if (yych <= 0xF4) goto yy30;
245
180
            goto yy22;
246
387
          }
247
1.55k
        }
248
3.37k
      }
249
51.0M
    }
250
43.6k
    ++YYCURSOR;
251
43.6k
    {
252
43.6k
    if (s->limit < s->cursor) {
253
43.5k
      return PHP_JSON_T_EOI;
254
43.5k
    } else {
255
115
      s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
256
115
      return PHP_JSON_T_ERROR;
257
115
    }
258
43.6k
  }
259
377
yy1:
260
377
    ++YYCURSOR;
261
377
    {
262
377
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
263
377
    return PHP_JSON_T_ERROR;
264
43.6k
  }
265
3.19k
yy2:
266
3.19k
    yych = *++YYCURSOR;
267
3.97k
yy3:
268
3.97k
    if (yybm_JS[0+yych] & 64) {
269
770
      goto yy2;
270
770
    }
271
3.20k
    { goto std; }
272
1.15k
yy4:
273
1.15k
    ++YYCURSOR;
274
1.15k
    {
275
1.15k
    s->line++;
276
1.15k
    s->line_start = s->cursor;
277
1.15k
    goto std;
278
3.97k
  }
279
993
yy5:
280
993
    yych = *++YYCURSOR;
281
993
    if (yych == '\n') goto yy4;
282
778
    goto yy3;
283
3.18k
yy6:
284
3.18k
    ++YYCURSOR;
285
4.85k
yy7:
286
4.85k
    {
287
4.85k
    s->errcode = PHP_JSON_ERROR_SYNTAX;
288
4.85k
    return PHP_JSON_T_ERROR;
289
3.18k
  }
290
156k
yy8:
291
156k
    ++YYCURSOR;
292
156k
    {
293
156k
    s->str_start = s->cursor;
294
156k
    s->str_esc = 0;
295
156k
    s->utf8_invalid = 0;
296
156k
    s->utf8_invalid_count = 0;
297
156k
    PHP_JSON_CONDITION_SET_AND_GOTO(STR_P1);
298
3.18k
  }
299
47.8M
yy9:
300
47.8M
    ++YYCURSOR;
301
47.8M
    { return ','; }
302
4.75k
yy10:
303
4.75k
    yych = *++YYCURSOR;
304
4.75k
    if (yych <= '/') goto yy7;
305
4.54k
    if (yych <= '0') goto yy11;
306
3.74k
    if (yych <= '9') goto yy13;
307
143
    goto yy7;
308
19.8M
yy11:
309
19.8M
    yyaccept = 0;
310
19.8M
    yych = *(YYMARKER = ++YYCURSOR);
311
19.8M
    if (yych <= 'D') {
312
19.8M
      if (yych == '.') goto yy31;
313
19.8M
    } else {
314
7.99k
      if (yych <= 'E') goto yy33;
315
5.13k
      if (yych == 'e') goto yy33;
316
5.13k
    }
317
22.3M
yy12:
318
22.3M
    {
319
22.3M
    bool bigint = 0, negative = s->token[0] == '-';
320
22.3M
    size_t digits = PHP_JSON_TOKEN_LENGTH();
321
22.3M
    digits -= negative;
322
22.3M
    if (digits >= PHP_JSON_INT_MAX_LENGTH) {
323
25.0k
      if (digits == PHP_JSON_INT_MAX_LENGTH) {
324
13.3k
        int cmp = strncmp((char *) (s->token + negative), LONG_MIN_DIGITS, PHP_JSON_INT_MAX_LENGTH);
325
13.3k
        if (!(cmp < 0 || (cmp == 0 && negative))) {
326
12.1k
          bigint = 1;
327
12.1k
        }
328
13.3k
      } else {
329
11.6k
        bigint = 1;
330
11.6k
      }
331
25.0k
    }
332
22.3M
    if (!bigint) {
333
22.3M
      ZVAL_LONG(&s->value, ZEND_STRTOL((char *) s->token, NULL, 10));
334
22.3M
      return PHP_JSON_T_INT;
335
22.3M
    } else if (s->options & PHP_JSON_BIGINT_AS_STRING) {
336
12.1k
      ZVAL_STRINGL(&s->value, (char *) s->token, (size_t)(s->cursor - s->token));
337
12.1k
      return PHP_JSON_T_STRING;
338
12.1k
    } else {
339
11.6k
      ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
340
11.6k
      return PHP_JSON_T_DOUBLE;
341
11.6k
    }
342
22.3M
  }
343
120M
yy13:
344
120M
    yyaccept = 0;
345
120M
    yych = *(YYMARKER = ++YYCURSOR);
346
120M
    if (yybm_JS[0+yych] & 128) {
347
117M
      goto yy13;
348
117M
    }
349
2.64M
    if (yych <= 'D') {
350
2.58M
      if (yych == '.') goto yy31;
351
2.54M
      goto yy12;
352
2.58M
    } else {
353
57.1k
      if (yych <= 'E') goto yy33;
354
51.3k
      if (yych == 'e') goto yy33;
355
5.50k
      goto yy12;
356
51.3k
    }
357
125k
yy14:
358
125k
    ++YYCURSOR;
359
125k
    { return ':'; }
360
19.9k
yy15:
361
19.9k
    ++YYCURSOR;
362
19.9k
    { return '['; }
363
7.46k
yy16:
364
7.46k
    ++YYCURSOR;
365
7.46k
    { return ']'; }
366
731
yy17:
367
731
    yyaccept = 1;
368
731
    yych = *(YYMARKER = ++YYCURSOR);
369
731
    if (yych == 'a') goto yy34;
370
87
    goto yy7;
371
704
yy18:
372
704
    yyaccept = 1;
373
704
    yych = *(YYMARKER = ++YYCURSOR);
374
704
    if (yych == 'u') goto yy35;
375
155
    goto yy7;
376
640
yy19:
377
640
    yyaccept = 1;
378
640
    yych = *(YYMARKER = ++YYCURSOR);
379
640
    if (yych == 'r') goto yy36;
380
131
    goto yy7;
381
25.5M
yy20:
382
25.5M
    ++YYCURSOR;
383
25.5M
    { return '{'; }
384
25.4M
yy21:
385
25.4M
    ++YYCURSOR;
386
25.4M
    { return '}'; }
387
707
yy22:
388
707
    ++YYCURSOR;
389
3.06k
yy23:
390
3.06k
    {
391
3.06k
    s->errcode = PHP_JSON_ERROR_UTF8;
392
3.06k
    return PHP_JSON_T_ERROR;
393
707
  }
394
535
yy24:
395
535
    yych = *++YYCURSOR;
396
535
    if (yych <= 0x7F) goto yy23;
397
304
    if (yych <= 0xBF) goto yy6;
398
185
    goto yy23;
399
312
yy25:
400
312
    yyaccept = 2;
401
312
    yych = *(YYMARKER = ++YYCURSOR);
402
312
    if (yych <= 0x9F) goto yy23;
403
193
    if (yych <= 0xBF) goto yy37;
404
59
    goto yy23;
405
527
yy26:
406
527
    yyaccept = 2;
407
527
    yych = *(YYMARKER = ++YYCURSOR);
408
527
    if (yych <= 0x7F) goto yy23;
409
389
    if (yych <= 0xBF) goto yy37;
410
83
    goto yy23;
411
216
yy27:
412
216
    yyaccept = 2;
413
216
    yych = *(YYMARKER = ++YYCURSOR);
414
216
    if (yych <= 0x7F) goto yy23;
415
181
    if (yych <= 0x9F) goto yy37;
416
95
    goto yy23;
417
416
yy28:
418
416
    yyaccept = 2;
419
416
    yych = *(YYMARKER = ++YYCURSOR);
420
416
    if (yych <= 0x8F) goto yy23;
421
258
    if (yych <= 0xBF) goto yy38;
422
83
    goto yy23;
423
424
yy29:
424
424
    yyaccept = 2;
425
424
    yych = *(YYMARKER = ++YYCURSOR);
426
424
    if (yych <= 0x7F) goto yy23;
427
294
    if (yych <= 0xBF) goto yy38;
428
83
    goto yy23;
429
207
yy30:
430
207
    yyaccept = 2;
431
207
    yych = *(YYMARKER = ++YYCURSOR);
432
207
    if (yych <= 0x7F) goto yy23;
433
184
    if (yych <= 0x8F) goto yy38;
434
99
    goto yy23;
435
45.6k
yy31:
436
45.6k
    yych = *++YYCURSOR;
437
45.6k
    if (yych <= '/') goto yy32;
438
45.4k
    if (yych <= '9') goto yy39;
439
3.55k
yy32:
440
3.55k
    YYCURSOR = YYMARKER;
441
3.55k
    if (yyaccept <= 1) {
442
2.40k
      if (yyaccept == 0) {
443
1.45k
        goto yy12;
444
1.45k
      } else {
445
953
        goto yy7;
446
953
      }
447
2.40k
    } else {
448
1.15k
      if (yyaccept == 2) {
449
839
        goto yy23;
450
839
      } else {
451
316
        goto yy40;
452
316
      }
453
1.15k
    }
454
71.5k
yy33:
455
71.5k
    yych = *++YYCURSOR;
456
71.5k
    if (yych <= ',') {
457
2.04k
      if (yych == '+') goto yy41;
458
526
      goto yy32;
459
69.4k
    } else {
460
69.4k
      if (yych <= '-') goto yy41;
461
33.7k
      if (yych <= '/') goto yy32;
462
33.7k
      if (yych <= '9') goto yy42;
463
234
      goto yy32;
464
33.7k
    }
465
644
yy34:
466
644
    yych = *++YYCURSOR;
467
644
    if (yych == 'l') goto yy43;
468
131
    goto yy32;
469
549
yy35:
470
549
    yych = *++YYCURSOR;
471
549
    if (yych == 'l') goto yy44;
472
143
    goto yy32;
473
509
yy36:
474
509
    yych = *++YYCURSOR;
475
509
    if (yych == 'u') goto yy45;
476
119
    goto yy32;
477
597
yy37:
478
597
    yych = *++YYCURSOR;
479
597
    if (yych <= 0x7F) goto yy32;
480
253
    if (yych <= 0xBF) goto yy6;
481
95
    goto yy32;
482
471
yy38:
483
471
    yych = *++YYCURSOR;
484
471
    if (yych <= 0x7F) goto yy32;
485
162
    if (yych <= 0xBF) goto yy37;
486
91
    goto yy32;
487
416M
yy39:
488
416M
    yyaccept = 3;
489
416M
    yych = *(YYMARKER = ++YYCURSOR);
490
416M
    if (yych <= 'D') {
491
416M
      if (yych <= '/') goto yy40;
492
416M
      if (yych <= '9') goto yy39;
493
416M
    } else {
494
16.4k
      if (yych <= 'E') goto yy33;
495
15.4k
      if (yych == 'e') goto yy33;
496
15.4k
    }
497
100k
yy40:
498
100k
    {
499
100k
    ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
500
100k
    return PHP_JSON_T_DOUBLE;
501
416M
  }
502
37.2k
yy41:
503
37.2k
    yych = *++YYCURSOR;
504
37.2k
    if (yych <= '/') goto yy32;
505
37.0k
    if (yych >= ':') goto yy32;
506
6.48M
yy42:
507
6.48M
    yych = *++YYCURSOR;
508
6.48M
    if (yych <= '/') goto yy40;
509
6.41M
    if (yych <= '9') goto yy42;
510
589
    goto yy40;
511
589
yy43:
512
513
    yych = *++YYCURSOR;
513
513
    if (yych == 's') goto yy46;
514
107
    goto yy32;
515
406
yy44:
516
406
    yych = *++YYCURSOR;
517
406
    if (yych == 'l') goto yy47;
518
155
    goto yy32;
519
390
yy45:
520
390
    yych = *++YYCURSOR;
521
390
    if (yych == 'e') goto yy48;
522
155
    goto yy32;
523
406
yy46:
524
406
    yych = *++YYCURSOR;
525
406
    if (yych == 'e') goto yy49;
526
143
    goto yy32;
527
251
yy47:
528
251
    ++YYCURSOR;
529
251
    {
530
251
    ZVAL_NULL(&s->value);
531
251
    return PHP_JSON_T_NUL;
532
406
  }
533
235
yy48:
534
235
    ++YYCURSOR;
535
235
    {
536
235
    ZVAL_TRUE(&s->value);
537
235
    return PHP_JSON_T_TRUE;
538
406
  }
539
263
yy49:
540
263
    ++YYCURSOR;
541
263
    {
542
263
    ZVAL_FALSE(&s->value);
543
263
    return PHP_JSON_T_FALSE;
544
406
  }
545
/* *********************************** */
546
182M
yyc_STR_P1:
547
182M
    yych = *YYCURSOR;
548
182M
    if (yych <= 0xC1) {
549
178M
      if (yych <= '"') {
550
151k
        if (yych <= 0x00) goto yy51;
551
147k
        if (yych <= 0x1F) goto yy52;
552
147k
        if (yych <= '!') goto yy53;
553
136k
        goto yy54;
554
178M
      } else {
555
178M
        if (yych == '\\') goto yy55;
556
178M
        if (yych <= 0x7F) goto yy53;
557
635k
        goto yy57;
558
178M
      }
559
178M
    } else {
560
4.27M
      if (yych <= 0xED) {
561
703k
        if (yych <= 0xDF) goto yy59;
562
308k
        if (yych <= 0xE0) goto yy60;
563
288k
        if (yych <= 0xEC) goto yy61;
564
28.6k
        goto yy62;
565
3.57M
      } else {
566
3.57M
        if (yych <= 0xF0) {
567
774k
          if (yych <= 0xEF) goto yy61;
568
8.07k
          goto yy63;
569
2.79M
        } else {
570
2.79M
          if (yych <= 0xF3) goto yy64;
571
2.76M
          if (yych <= 0xF4) goto yy65;
572
2.66M
          goto yy57;
573
2.76M
        }
574
3.57M
      }
575
4.27M
    }
576
4.06k
yy51:
577
4.06k
    ++YYCURSOR;
578
4.06k
    {
579
4.06k
    if (s->limit < s->cursor) {
580
4.01k
      s->errcode = PHP_JSON_ERROR_SYNTAX;
581
4.01k
    } else {
582
47
      s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
583
47
    }
584
4.06k
    return PHP_JSON_T_ERROR;
585
182M
  }
586
167
yy52:
587
167
    ++YYCURSOR;
588
167
    {
589
167
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
590
167
    return PHP_JSON_T_ERROR;
591
182M
  }
592
177M
yy53:
593
177M
    ++YYCURSOR;
594
177M
    { PHP_JSON_CONDITION_GOTO(STR_P1); }
595
136k
yy54:
596
136k
    ++YYCURSOR;
597
136k
    {
598
136k
    zend_string *str;
599
136k
    size_t len = (size_t)(s->cursor - s->str_start - s->str_esc - 1 + s->utf8_invalid_count);
600
136k
    if (len == 0) {
601
29.2k
      PHP_JSON_CONDITION_SET(JS);
602
29.2k
      ZVAL_EMPTY_STRING(&s->value);
603
29.2k
      return PHP_JSON_T_ESTRING;
604
29.2k
    }
605
106k
    str = zend_string_falloc(len, /* persistent */ false, /* fallible */ true);
606
106k
    if (UNEXPECTED(!str)) {
607
0
      ZEND_ASSERT(ZEND_HAS_OOM());
608
0
      return PHP_JSON_T_ERROR;
609
0
    }
610
106k
    ZSTR_VAL(str)[len] = '\0';
611
106k
    ZVAL_STR(&s->value, str);
612
106k
    if (s->str_esc || s->utf8_invalid) {
613
43.0k
      s->pstr = (php_json_ctype *) Z_STRVAL(s->value);
614
43.0k
      s->cursor = s->str_start;
615
43.0k
      PHP_JSON_CONDITION_GOTO_STR_P2();
616
63.8k
    } else {
617
63.8k
      memcpy(Z_STRVAL(s->value), s->str_start, len);
618
63.8k
      PHP_JSON_CONDITION_SET(JS);
619
63.8k
      return PHP_JSON_T_STRING;
620
63.8k
    }
621
106k
  }
622
152k
yy55:
623
152k
    yyaccept = 0;
624
152k
    yych = *(YYMARKER = ++YYCURSOR);
625
152k
    if (yych <= 'e') {
626
15.8k
      if (yych <= '/') {
627
4.69k
        if (yych == '"') goto yy66;
628
2.68k
        if (yych >= '/') goto yy66;
629
11.1k
      } else {
630
11.1k
        if (yych <= '\\') {
631
8.15k
          if (yych >= '\\') goto yy66;
632
8.15k
        } else {
633
3.00k
          if (yych == 'b') goto yy66;
634
3.00k
        }
635
11.1k
      }
636
136k
    } else {
637
136k
      if (yych <= 'q') {
638
5.96k
        if (yych <= 'f') goto yy66;
639
2.13k
        if (yych == 'n') goto yy66;
640
130k
      } else {
641
130k
        if (yych <= 's') {
642
2.25k
          if (yych <= 'r') goto yy66;
643
128k
        } else {
644
128k
          if (yych <= 't') goto yy66;
645
125k
          if (yych <= 'u') goto yy67;
646
125k
        }
647
130k
      }
648
136k
    }
649
6.75k
yy56:
650
6.75k
    {
651
6.75k
    s->errcode = PHP_JSON_ERROR_SYNTAX;
652
6.75k
    return PHP_JSON_T_ERROR;
653
152k
  }
654
3.30M
yy57:
655
3.30M
    ++YYCURSOR;
656
4.89M
yy58:
657
4.89M
    {
658
4.89M
    if (s->options & (PHP_JSON_INVALID_UTF8_IGNORE | PHP_JSON_INVALID_UTF8_SUBSTITUTE)) {
659
4.88M
      if (s->options & PHP_JSON_INVALID_UTF8_SUBSTITUTE) {
660
2.44M
        if (s->utf8_invalid_count > INT_MAX - 2) {
661
0
          s->errcode = PHP_JSON_ERROR_UTF8;
662
0
          return PHP_JSON_T_ERROR;
663
0
        }
664
2.44M
        s->utf8_invalid_count += 2;
665
2.44M
      } else {
666
2.44M
        s->utf8_invalid_count--;
667
2.44M
      }
668
4.88M
      s->utf8_invalid = 1;
669
4.88M
      PHP_JSON_CONDITION_GOTO(STR_P1);
670
4.88M
    }
671
7.86k
    s->errcode = PHP_JSON_ERROR_UTF8;
672
7.86k
    return PHP_JSON_T_ERROR;
673
4.89M
  }
674
395k
yy59:
675
395k
    yych = *++YYCURSOR;
676
395k
    if (yych <= 0x7F) goto yy58;
677
385k
    if (yych <= 0xBF) goto yy53;
678
382k
    goto yy58;
679
382k
yy60:
680
19.4k
    yyaccept = 1;
681
19.4k
    yych = *(YYMARKER = ++YYCURSOR);
682
19.4k
    if (yych <= 0x9F) goto yy58;
683
16.7k
    if (yych <= 0xBF) goto yy69;
684
13.9k
    goto yy58;
685
1.02M
yy61:
686
1.02M
    yyaccept = 1;
687
1.02M
    yych = *(YYMARKER = ++YYCURSOR);
688
1.02M
    if (yych <= 0x7F) goto yy58;
689
1.02M
    if (yych <= 0xBF) goto yy69;
690
1.01M
    goto yy58;
691
1.01M
yy62:
692
28.6k
    yyaccept = 1;
693
28.6k
    yych = *(YYMARKER = ++YYCURSOR);
694
28.6k
    if (yych <= 0x7F) goto yy58;
695
26.1k
    if (yych <= 0x9F) goto yy69;
696
23.5k
    goto yy58;
697
23.5k
yy63:
698
8.07k
    yyaccept = 1;
699
8.07k
    yych = *(YYMARKER = ++YYCURSOR);
700
8.07k
    if (yych <= 0x8F) goto yy58;
701
5.59k
    if (yych <= 0xBF) goto yy70;
702
3.67k
    goto yy58;
703
32.0k
yy64:
704
32.0k
    yyaccept = 1;
705
32.0k
    yych = *(YYMARKER = ++YYCURSOR);
706
32.0k
    if (yych <= 0x7F) goto yy58;
707
27.7k
    if (yych <= 0xBF) goto yy70;
708
22.1k
    goto yy58;
709
97.0k
yy65:
710
97.0k
    yyaccept = 1;
711
97.0k
    yych = *(YYMARKER = ++YYCURSOR);
712
97.0k
    if (yych <= 0x7F) goto yy58;
713
93.4k
    if (yych <= 0x8F) goto yy70;
714
89.0k
    goto yy58;
715
89.0k
yy66:
716
26.6k
    ++YYCURSOR;
717
26.6k
    {
718
26.6k
    s->str_esc++;
719
26.6k
    PHP_JSON_CONDITION_GOTO(STR_P1);
720
93.4k
  }
721
125k
yy67:
722
125k
    yych = *++YYCURSOR;
723
125k
    if (yych <= 'D') {
724
110k
      if (yych <= '9') {
725
87.2k
        if (yych <= '/') goto yy68;
726
87.1k
        if (yych <= '0') goto yy71;
727
6.64k
        goto yy72;
728
87.1k
      } else {
729
23.6k
        if (yych <= '@') goto yy68;
730
23.5k
        if (yych <= 'C') goto yy72;
731
21.0k
        goto yy73;
732
23.5k
      }
733
110k
    } else {
734
14.6k
      if (yych <= 'c') {
735
7.62k
        if (yych <= 'F') goto yy72;
736
5.95k
        if (yych >= 'a') goto yy72;
737
7.02k
      } else {
738
7.02k
        if (yych <= 'd') goto yy73;
739
2.35k
        if (yych <= 'f') goto yy72;
740
2.35k
      }
741
14.6k
    }
742
19.5k
yy68:
743
19.5k
    YYCURSOR = YYMARKER;
744
19.5k
    if (yyaccept <= 1) {
745
18.7k
      if (yyaccept == 0) {
746
6.16k
        goto yy56;
747
12.5k
      } else {
748
12.5k
        goto yy58;
749
12.5k
      }
750
18.7k
    } else {
751
844
      goto yy88;
752
844
    }
753
17.8k
yy69:
754
17.8k
    yych = *++YYCURSOR;
755
17.8k
    if (yych <= 0x7F) goto yy68;
756
15.8k
    if (yych <= 0xBF) goto yy53;
757
6.03k
    goto yy68;
758
11.9k
yy70:
759
11.9k
    yych = *++YYCURSOR;
760
11.9k
    if (yych <= 0x7F) goto yy68;
761
9.65k
    if (yych <= 0xBF) goto yy69;
762
2.27k
    goto yy68;
763
80.4k
yy71:
764
80.4k
    yych = *++YYCURSOR;
765
80.4k
    if (yych <= '9') {
766
77.3k
      if (yych <= '/') goto yy68;
767
77.2k
      if (yych <= '0') goto yy74;
768
19.9k
      if (yych <= '7') goto yy75;
769
3.10k
      goto yy76;
770
19.9k
    } else {
771
3.15k
      if (yych <= 'F') {
772
1.40k
        if (yych <= '@') goto yy68;
773
1.37k
        goto yy76;
774
1.74k
      } else {
775
1.74k
        if (yych <= '`') goto yy68;
776
1.67k
        if (yych <= 'f') goto yy76;
777
131
        goto yy68;
778
1.67k
      }
779
3.15k
    }
780
19.0k
yy72:
781
19.0k
    yych = *++YYCURSOR;
782
19.0k
    if (yych <= '@') {
783
8.16k
      if (yych <= '/') goto yy68;
784
7.75k
      if (yych <= '9') goto yy76;
785
47
      goto yy68;
786
10.8k
    } else {
787
10.8k
      if (yych <= 'F') goto yy76;
788
7.61k
      if (yych <= '`') goto yy68;
789
7.55k
      if (yych <= 'f') goto yy76;
790
107
      goto yy68;
791
7.55k
    }
792
25.6k
yy73:
793
25.6k
    yych = *++YYCURSOR;
794
25.6k
    if (yych <= 'B') {
795
20.8k
      if (yych <= '7') {
796
4.04k
        if (yych <= '/') goto yy68;
797
3.87k
        goto yy76;
798
16.8k
      } else {
799
16.8k
        if (yych <= '9') goto yy77;
800
10.6k
        if (yych <= '@') goto yy68;
801
10.5k
        goto yy77;
802
10.6k
      }
803
20.8k
    } else {
804
4.80k
      if (yych <= '`') {
805
704
        if (yych <= 'F') goto yy78;
806
59
        goto yy68;
807
4.09k
      } else {
808
4.09k
        if (yych <= 'b') goto yy77;
809
354
        if (yych <= 'f') goto yy78;
810
131
        goto yy68;
811
354
      }
812
4.80k
    }
813
57.2k
yy74:
814
57.2k
    yych = *++YYCURSOR;
815
57.2k
    if (yych <= '@') {
816
44.8k
      if (yych <= '/') goto yy68;
817
44.7k
      if (yych <= '7') goto yy79;
818
3.42k
      if (yych <= '9') goto yy80;
819
35
      goto yy68;
820
12.4k
    } else {
821
12.4k
      if (yych <= 'F') goto yy80;
822
9.04k
      if (yych <= '`') goto yy68;
823
8.99k
      if (yych <= 'f') goto yy80;
824
119
      goto yy68;
825
8.99k
    }
826
16.8k
yy75:
827
16.8k
    yych = *++YYCURSOR;
828
16.8k
    if (yych <= '@') {
829
3.06k
      if (yych <= '/') goto yy68;
830
2.99k
      if (yych <= '9') goto yy80;
831
47
      goto yy68;
832
13.7k
    } else {
833
13.7k
      if (yych <= 'F') goto yy80;
834
2.60k
      if (yych <= '`') goto yy68;
835
2.57k
      if (yych <= 'f') goto yy80;
836
107
      goto yy68;
837
2.57k
    }
838
28.2k
yy76:
839
28.2k
    yych = *++YYCURSOR;
840
28.2k
    if (yych <= '@') {
841
15.6k
      if (yych <= '/') goto yy68;
842
15.0k
      if (yych <= '9') goto yy81;
843
47
      goto yy68;
844
15.0k
    } else {
845
12.6k
      if (yych <= 'F') goto yy81;
846
8.26k
      if (yych <= '`') goto yy68;
847
8.20k
      if (yych <= 'f') goto yy81;
848
131
      goto yy68;
849
8.20k
    }
850
20.5k
yy77:
851
20.5k
    yych = *++YYCURSOR;
852
20.5k
    if (yych <= '@') {
853
6.66k
      if (yych <= '/') goto yy68;
854
6.43k
      if (yych <= '9') goto yy82;
855
23
      goto yy68;
856
13.8k
    } else {
857
13.8k
      if (yych <= 'F') goto yy82;
858
2.43k
      if (yych <= '`') goto yy68;
859
2.36k
      if (yych <= 'f') goto yy82;
860
83
      goto yy68;
861
2.36k
    }
862
868
yy78:
863
868
    yych = *++YYCURSOR;
864
868
    if (yych <= '@') {
865
456
      if (yych <= '/') goto yy68;
866
272
      if (yych <= '9') goto yy83;
867
47
      goto yy68;
868
412
    } else {
869
412
      if (yych <= 'F') goto yy83;
870
278
      if (yych <= '`') goto yy68;
871
243
      if (yych <= 'f') goto yy83;
872
95
      goto yy68;
873
243
    }
874
41.3k
yy79:
875
41.3k
    yych = *++YYCURSOR;
876
41.3k
    if (yych <= '@') {
877
31.5k
      if (yych <= '/') goto yy68;
878
31.5k
      if (yych <= '9') goto yy84;
879
35
      goto yy68;
880
31.5k
    } else {
881
9.73k
      if (yych <= 'F') goto yy84;
882
3.91k
      if (yych <= '`') goto yy68;
883
3.84k
      if (yych <= 'f') goto yy84;
884
131
      goto yy68;
885
3.84k
    }
886
32.2k
yy80:
887
32.2k
    yych = *++YYCURSOR;
888
32.2k
    if (yych <= '@') {
889
10.0k
      if (yych <= '/') goto yy68;
890
9.62k
      if (yych <= '9') goto yy85;
891
47
      goto yy68;
892
22.1k
    } else {
893
22.1k
      if (yych <= 'F') goto yy85;
894
8.91k
      if (yych <= '`') goto yy68;
895
8.87k
      if (yych <= 'f') goto yy85;
896
107
      goto yy68;
897
8.87k
    }
898
27.4k
yy81:
899
27.4k
    yych = *++YYCURSOR;
900
27.4k
    if (yych <= '@') {
901
11.9k
      if (yych <= '/') goto yy68;
902
11.6k
      if (yych <= '9') goto yy86;
903
59
      goto yy68;
904
15.5k
    } else {
905
15.5k
      if (yych <= 'F') goto yy86;
906
7.38k
      if (yych <= '`') goto yy68;
907
7.32k
      if (yych <= 'f') goto yy86;
908
109
      goto yy68;
909
7.32k
    }
910
20.1k
yy82:
911
20.1k
    yych = *++YYCURSOR;
912
20.1k
    if (yych <= '@') {
913
6.38k
      if (yych <= '/') goto yy68;
914
6.08k
      if (yych <= '9') goto yy87;
915
23
      goto yy68;
916
13.7k
    } else {
917
13.7k
      if (yych <= 'F') goto yy87;
918
2.88k
      if (yych <= '`') goto yy68;
919
2.82k
      if (yych <= 'f') goto yy87;
920
107
      goto yy68;
921
2.82k
    }
922
507
yy83:
923
507
    yych = *++YYCURSOR;
924
507
    if (yych <= '@') {
925
283
      if (yych <= '/') goto yy68;
926
94
      if (yych <= '9') goto yy89;
927
47
      goto yy68;
928
224
    } else {
929
224
      if (yych <= 'F') goto yy89;
930
189
      if (yych <= '`') goto yy68;
931
118
      if (yych <= 'f') goto yy89;
932
95
      goto yy68;
933
118
    }
934
41.0k
yy84:
935
41.0k
    ++YYCURSOR;
936
41.0k
    {
937
41.0k
    s->str_esc += 5;
938
41.0k
    PHP_JSON_CONDITION_GOTO(STR_P1);
939
507
  }
940
31.5k
yy85:
941
31.5k
    ++YYCURSOR;
942
31.5k
    {
943
31.5k
    s->str_esc += 4;
944
31.5k
    PHP_JSON_CONDITION_GOTO(STR_P1);
945
507
  }
946
26.9k
yy86:
947
26.9k
    ++YYCURSOR;
948
26.9k
    {
949
26.9k
    s->str_esc += 3;
950
26.9k
    PHP_JSON_CONDITION_GOTO(STR_P1);
951
507
  }
952
19.6k
yy87:
953
19.6k
    yyaccept = 2;
954
19.6k
    yych = *(YYMARKER = ++YYCURSOR);
955
19.6k
    if (yych == '\\') goto yy90;
956
1.21k
yy88:
957
1.21k
    {
958
1.21k
    s->errcode = PHP_JSON_ERROR_UTF16;
959
1.21k
    return PHP_JSON_T_ERROR;
960
19.6k
  }
961
105
yy89:
962
105
    ++YYCURSOR;
963
105
    goto yy88;
964
19.3k
yy90:
965
19.3k
    yych = *++YYCURSOR;
966
19.3k
    if (yych != 'u') goto yy68;
967
19.3k
    yych = *++YYCURSOR;
968
19.3k
    if (yych == 'D') goto yy91;
969
2.05k
    if (yych != 'd') goto yy68;
970
19.2k
yy91:
971
19.2k
    yych = *++YYCURSOR;
972
19.2k
    if (yych <= 'B') goto yy68;
973
19.1k
    if (yych <= 'F') goto yy92;
974
2.54k
    if (yych <= 'b') goto yy68;
975
2.52k
    if (yych >= 'g') goto yy68;
976
19.0k
yy92:
977
19.0k
    yych = *++YYCURSOR;
978
19.0k
    if (yych <= '@') {
979
6.98k
      if (yych <= '/') goto yy68;
980
6.85k
      if (yych >= ':') goto yy68;
981
12.0k
    } else {
982
12.0k
      if (yych <= 'F') goto yy93;
983
2.81k
      if (yych <= '`') goto yy68;
984
2.74k
      if (yych >= 'g') goto yy68;
985
2.74k
    }
986
18.8k
yy93:
987
18.8k
    yych = *++YYCURSOR;
988
18.8k
    if (yych <= '@') {
989
7.32k
      if (yych <= '/') goto yy68;
990
7.14k
      if (yych >= ':') goto yy68;
991
11.4k
    } else {
992
11.4k
      if (yych <= 'F') goto yy94;
993
4.73k
      if (yych <= '`') goto yy68;
994
4.71k
      if (yych >= 'g') goto yy68;
995
4.71k
    }
996
18.5k
yy94:
997
18.5k
    ++YYCURSOR;
998
18.5k
    {
999
18.5k
    s->str_esc += 8;
1000
18.5k
    PHP_JSON_CONDITION_GOTO(STR_P1);
1001
18.8k
  }
1002
/* *********************************** */
1003
115M
yyc_STR_P2_BIN:
1004
115M
    yych = *YYCURSOR;
1005
115M
    if (yych <= 0xDF) {
1006
111M
      if (yych <= '[') {
1007
82.6M
        if (yych == '"') goto yy97;
1008
82.6M
      } else {
1009
29.0M
        if (yych <= '\\') goto yy98;
1010
29.0M
        if (yych <= 0x7F) goto yy96;
1011
992k
        if (yych <= 0xC1) goto yy100;
1012
391k
        goto yy102;
1013
992k
      }
1014
111M
    } else {
1015
3.86M
      if (yych <= 0xEF) {
1016
1.06M
        if (yych <= 0xE0) goto yy103;
1017
1.04M
        if (yych == 0xED) goto yy105;
1018
1.02M
        goto yy104;
1019
2.79M
      } else {
1020
2.79M
        if (yych <= 0xF0) goto yy106;
1021
2.78M
        if (yych <= 0xF3) goto yy107;
1022
2.75M
        if (yych <= 0xF4) goto yy108;
1023
2.66M
        goto yy100;
1024
2.75M
      }
1025
3.86M
    }
1026
110M
yy96:
1027
110M
    ++YYCURSOR;
1028
110M
    { PHP_JSON_CONDITION_GOTO(STR_P2_BIN); }
1029
16.9k
yy97:
1030
16.9k
    ++YYCURSOR;
1031
16.9k
    YYSETCONDITION(yycJS);
1032
16.9k
    {
1033
16.9k
    PHP_JSON_SCANNER_COPY_ESC();
1034
16.9k
    return PHP_JSON_T_STRING;
1035
115M
  }
1036
63.9k
yy98:
1037
63.9k
    yyaccept = 0;
1038
63.9k
    yych = *(YYMARKER = ++YYCURSOR);
1039
63.9k
    if (yych == 'u') goto yy109;
1040
12.4k
yy99:
1041
12.4k
    {
1042
12.4k
    unsigned char esc;
1043
12.4k
    PHP_JSON_SCANNER_COPY_ESC();
1044
12.4k
    switch (*s->cursor) {
1045
1.51k
      case 'b':
1046
1.51k
        esc = '\b';
1047
1.51k
        break;
1048
1.66k
      case 'f':
1049
1.66k
        esc = '\f';       break;
1050
743
      case 'n':
1051
743
        esc = '\n';
1052
743
        break;
1053
1.32k
      case 'r':
1054
1.32k
        esc = '\r';
1055
1.32k
        break;
1056
1.62k
      case 't':
1057
1.62k
        esc = '\t';
1058
1.62k
        break;
1059
4.11k
      case '\\':
1060
4.81k
      case '/':
1061
5.60k
      case '"':
1062
5.60k
        esc = *s->cursor;
1063
5.60k
        break;
1064
0
      default:
1065
0
        s->errcode = PHP_JSON_ERROR_SYNTAX;
1066
0
        return PHP_JSON_T_ERROR;
1067
12.4k
    }
1068
12.4k
    *(s->pstr++) = esc;
1069
12.4k
    ++YYCURSOR;
1070
12.4k
    s->str_start = s->cursor;
1071
12.4k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1072
12.4k
  }
1073
3.26M
yy100:
1074
3.26M
    ++YYCURSOR;
1075
4.84M
yy101:
1076
4.84M
    {
1077
4.84M
    if (s->utf8_invalid) {
1078
4.84M
      PHP_JSON_SCANNER_COPY_ESC();
1079
4.84M
      if (s->options & PHP_JSON_INVALID_UTF8_SUBSTITUTE) {
1080
2.42M
        *(s->pstr++) = (unsigned char) (0xe0 | (0xfffd >> 12));
1081
2.42M
        *(s->pstr++) = (unsigned char) (0x80 | ((0xfffd >> 6) & 0x3f));
1082
2.42M
        *(s->pstr++) = (unsigned char) (0x80 | (0xfffd & 0x3f));
1083
2.42M
      }
1084
4.84M
      s->str_start = s->cursor;
1085
4.84M
    }
1086
4.84M
    PHP_JSON_CONDITION_GOTO(STR_P2_BIN);
1087
3.26M
  }
1088
391k
yy102:
1089
391k
    yych = *++YYCURSOR;
1090
391k
    if (yych <= 0x7F) goto yy101;
1091
383k
    if (yych <= 0xBF) goto yy96;
1092
380k
    goto yy101;
1093
380k
yy103:
1094
17.2k
    yyaccept = 1;
1095
17.2k
    yych = *(YYMARKER = ++YYCURSOR);
1096
17.2k
    if (yych <= 0x9F) goto yy101;
1097
14.9k
    if (yych <= 0xBF) goto yy111;
1098
13.0k
    goto yy101;
1099
1.02M
yy104:
1100
1.02M
    yyaccept = 1;
1101
1.02M
    yych = *(YYMARKER = ++YYCURSOR);
1102
1.02M
    if (yych <= 0x7F) goto yy101;
1103
1.01M
    if (yych <= 0xBF) goto yy111;
1104
1.01M
    goto yy101;
1105
1.01M
yy105:
1106
25.7k
    yyaccept = 1;
1107
25.7k
    yych = *(YYMARKER = ++YYCURSOR);
1108
25.7k
    if (yych <= 0x7F) goto yy101;
1109
23.3k
    if (yych <= 0x9F) goto yy111;
1110
21.3k
    goto yy101;
1111
21.3k
yy106:
1112
6.54k
    yyaccept = 1;
1113
6.54k
    yych = *(YYMARKER = ++YYCURSOR);
1114
6.54k
    if (yych <= 0x8F) goto yy101;
1115
4.76k
    if (yych <= 0xBF) goto yy112;
1116
3.27k
    goto yy101;
1117
29.8k
yy107:
1118
29.8k
    yyaccept = 1;
1119
29.8k
    yych = *(YYMARKER = ++YYCURSOR);
1120
29.8k
    if (yych <= 0x7F) goto yy101;
1121
26.0k
    if (yych <= 0xBF) goto yy112;
1122
21.4k
    goto yy101;
1123
94.8k
yy108:
1124
94.8k
    yyaccept = 1;
1125
94.8k
    yych = *(YYMARKER = ++YYCURSOR);
1126
94.8k
    if (yych <= 0x7F) goto yy101;
1127
91.4k
    if (yych <= 0x8F) goto yy112;
1128
87.6k
    goto yy101;
1129
87.6k
yy109:
1130
51.4k
    yych = *++YYCURSOR;
1131
51.4k
    if (yych <= 'D') {
1132
46.4k
      if (yych <= '9') {
1133
35.4k
        if (yych <= '/') goto yy110;
1134
35.4k
        if (yych <= '0') goto yy113;
1135
3.15k
        goto yy114;
1136
35.4k
      } else {
1137
10.9k
        if (yych <= '@') goto yy110;
1138
10.9k
        if (yych <= 'C') goto yy114;
1139
10.2k
        goto yy115;
1140
10.9k
      }
1141
46.4k
    } else {
1142
5.01k
      if (yych <= 'c') {
1143
2.37k
        if (yych <= 'F') goto yy114;
1144
1.70k
        if (yych >= 'a') goto yy114;
1145
2.64k
      } else {
1146
2.64k
        if (yych <= 'd') goto yy115;
1147
1.04k
        if (yych <= 'f') goto yy114;
1148
1.04k
      }
1149
5.01k
    }
1150
9.68k
yy110:
1151
9.68k
    YYCURSOR = YYMARKER;
1152
9.68k
    if (yyaccept == 0) {
1153
0
      goto yy99;
1154
9.68k
    } else {
1155
9.68k
      goto yy101;
1156
9.68k
    }
1157
15.0k
yy111:
1158
15.0k
    yych = *++YYCURSOR;
1159
15.0k
    if (yych <= 0x7F) goto yy110;
1160
13.9k
    if (yych <= 0xBF) goto yy96;
1161
5.48k
    goto yy110;
1162
9.99k
yy112:
1163
9.99k
    yych = *++YYCURSOR;
1164
9.99k
    if (yych <= 0x7F) goto yy110;
1165
8.32k
    if (yych <= 0xBF) goto yy111;
1166
1.41k
    goto yy110;
1167
32.3k
yy113:
1168
32.3k
    yych = *++YYCURSOR;
1169
32.3k
    if (yych <= '9') {
1170
31.0k
      if (yych <= '/') goto yy110;
1171
31.0k
      if (yych <= '0') goto yy116;
1172
9.58k
      if (yych <= '7') goto yy117;
1173
1.07k
      goto yy118;
1174
9.58k
    } else {
1175
1.20k
      if (yych <= 'F') {
1176
621
        if (yych <= '@') goto yy110;
1177
621
        goto yy118;
1178
621
      } else {
1179
586
        if (yych <= '`') goto yy110;
1180
586
        if (yych <= 'f') goto yy118;
1181
0
        goto yy110;
1182
586
      }
1183
1.20k
    }
1184
7.33k
yy114:
1185
7.33k
    yych = *++YYCURSOR;
1186
7.33k
    if (yych <= '@') {
1187
3.55k
      if (yych <= '/') goto yy110;
1188
3.55k
      if (yych <= '9') goto yy118;
1189
0
      goto yy110;
1190
3.78k
    } else {
1191
3.78k
      if (yych <= 'F') goto yy118;
1192
2.51k
      if (yych <= '`') goto yy110;
1193
2.51k
      if (yych <= 'f') goto yy118;
1194
0
      goto yy110;
1195
2.51k
    }
1196
11.8k
yy115:
1197
11.8k
    yych = *++YYCURSOR;
1198
11.8k
    if (yych <= '@') {
1199
5.33k
      if (yych <= '/') goto yy110;
1200
5.33k
      if (yych <= '7') goto yy118;
1201
3.77k
      if (yych <= '9') goto yy119;
1202
0
      goto yy110;
1203
6.46k
    } else {
1204
6.46k
      if (yych <= 'B') goto yy119;
1205
2.07k
      if (yych <= '`') goto yy110;
1206
2.07k
      if (yych <= 'b') goto yy119;
1207
0
      goto yy110;
1208
2.07k
    }
1209
21.5k
yy116:
1210
21.5k
    yych = *++YYCURSOR;
1211
21.5k
    if (yych <= '@') {
1212
16.0k
      if (yych <= '/') goto yy110;
1213
16.0k
      if (yych <= '7') goto yy120;
1214
1.82k
      if (yych <= '9') goto yy121;
1215
0
      goto yy110;
1216
5.46k
    } else {
1217
5.46k
      if (yych <= 'F') goto yy121;
1218
3.73k
      if (yych <= '`') goto yy110;
1219
3.73k
      if (yych <= 'f') goto yy121;
1220
0
      goto yy110;
1221
3.73k
    }
1222
8.51k
yy117:
1223
8.51k
    yych = *++YYCURSOR;
1224
8.51k
    if (yych <= '@') {
1225
1.31k
      if (yych <= '/') goto yy110;
1226
1.31k
      if (yych <= '9') goto yy121;
1227
0
      goto yy110;
1228
7.20k
    } else {
1229
7.20k
      if (yych <= 'F') goto yy121;
1230
1.10k
      if (yych <= '`') goto yy110;
1231
1.10k
      if (yych <= 'f') goto yy121;
1232
0
      goto yy110;
1233
1.10k
    }
1234
11.1k
yy118:
1235
11.1k
    yych = *++YYCURSOR;
1236
11.1k
    if (yych <= '@') {
1237
6.19k
      if (yych <= '/') goto yy110;
1238
6.19k
      if (yych <= '9') goto yy122;
1239
0
      goto yy110;
1240
6.19k
    } else {
1241
4.98k
      if (yych <= 'F') goto yy122;
1242
2.87k
      if (yych <= '`') goto yy110;
1243
2.87k
      if (yych <= 'f') goto yy122;
1244
0
      goto yy110;
1245
2.87k
    }
1246
10.2k
yy119:
1247
10.2k
    yych = *++YYCURSOR;
1248
10.2k
    if (yych <= '@') {
1249
3.92k
      if (yych <= '/') goto yy110;
1250
3.92k
      if (yych <= '9') goto yy123;
1251
0
      goto yy110;
1252
6.31k
    } else {
1253
6.31k
      if (yych <= 'F') goto yy123;
1254
537
      if (yych <= '`') goto yy110;
1255
537
      if (yych <= 'f') goto yy123;
1256
0
      goto yy110;
1257
537
    }
1258
14.2k
yy120:
1259
14.2k
    yych = *++YYCURSOR;
1260
14.2k
    if (yych <= '@') {
1261
9.01k
      if (yych <= '/') goto yy110;
1262
9.01k
      if (yych <= '9') goto yy124;
1263
0
      goto yy110;
1264
9.01k
    } else {
1265
5.20k
      if (yych <= 'F') goto yy124;
1266
1.82k
      if (yych <= '`') goto yy110;
1267
1.82k
      if (yych <= 'f') goto yy124;
1268
0
      goto yy110;
1269
1.82k
    }
1270
15.8k
yy121:
1271
15.8k
    yych = *++YYCURSOR;
1272
15.8k
    if (yych <= '@') {
1273
3.91k
      if (yych <= '/') goto yy110;
1274
3.91k
      if (yych <= '9') goto yy125;
1275
0
      goto yy110;
1276
11.8k
    } else {
1277
11.8k
      if (yych <= 'F') goto yy125;
1278
4.22k
      if (yych <= '`') goto yy110;
1279
4.22k
      if (yych <= 'f') goto yy125;
1280
0
      goto yy110;
1281
4.22k
    }
1282
11.1k
yy122:
1283
11.1k
    yych = *++YYCURSOR;
1284
11.1k
    if (yych <= '@') {
1285
4.57k
      if (yych <= '/') goto yy110;
1286
4.57k
      if (yych <= '9') goto yy126;
1287
0
      goto yy110;
1288
6.61k
    } else {
1289
6.61k
      if (yych <= 'F') goto yy126;
1290
2.67k
      if (yych <= '`') goto yy110;
1291
2.67k
      if (yych <= 'f') goto yy126;
1292
0
      goto yy110;
1293
2.67k
    }
1294
10.2k
yy123:
1295
10.2k
    yych = *++YYCURSOR;
1296
10.2k
    if (yych <= '@') {
1297
3.76k
      if (yych <= '/') goto yy110;
1298
3.76k
      if (yych <= '9') goto yy127;
1299
0
      goto yy110;
1300
6.47k
    } else {
1301
6.47k
      if (yych <= 'F') goto yy127;
1302
1.55k
      if (yych <= '`') goto yy110;
1303
1.55k
      if (yych <= 'f') goto yy127;
1304
0
      goto yy110;
1305
1.55k
    }
1306
14.2k
yy124:
1307
14.2k
    ++YYCURSOR;
1308
14.2k
    {
1309
14.2k
    int utf16 = php_json_ucs2_to_int(s, 2);
1310
14.2k
    PHP_JSON_SCANNER_COPY_UTF();
1311
14.2k
    *(s->pstr++) = (unsigned char) utf16;
1312
14.2k
    s->str_start = s->cursor;
1313
14.2k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1314
14.2k
  }
1315
15.8k
yy125:
1316
15.8k
    ++YYCURSOR;
1317
15.8k
    {
1318
15.8k
    int utf16 = php_json_ucs2_to_int(s, 3);
1319
15.8k
    PHP_JSON_SCANNER_COPY_UTF();
1320
15.8k
    *(s->pstr++) = (unsigned char) (0xc0 | (utf16 >> 6));
1321
15.8k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1322
15.8k
    s->str_start = s->cursor;
1323
15.8k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1324
15.8k
  }
1325
11.1k
yy126:
1326
11.1k
    ++YYCURSOR;
1327
11.1k
    {
1328
11.1k
    int utf16 = php_json_ucs2_to_int(s, 4);
1329
11.1k
    PHP_JSON_SCANNER_COPY_UTF();
1330
11.1k
    *(s->pstr++) = (unsigned char) (0xe0 | (utf16 >> 12));
1331
11.1k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf16 >> 6) & 0x3f));
1332
11.1k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1333
11.1k
    s->str_start = s->cursor;
1334
11.1k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1335
11.1k
  }
1336
10.2k
yy127:
1337
10.2k
    yych = *++YYCURSOR;
1338
10.2k
    if (yych != '\\') goto yy110;
1339
10.2k
    yych = *++YYCURSOR;
1340
10.2k
    if (yych != 'u') goto yy110;
1341
10.2k
    yych = *++YYCURSOR;
1342
10.2k
    if (yych == 'D') goto yy128;
1343
719
    if (yych != 'd') goto yy110;
1344
10.2k
yy128:
1345
10.2k
    yych = *++YYCURSOR;
1346
10.2k
    if (yych <= 'B') goto yy110;
1347
10.2k
    if (yych <= 'F') goto yy129;
1348
682
    if (yych <= 'b') goto yy110;
1349
682
    if (yych >= 'g') goto yy110;
1350
10.2k
yy129:
1351
10.2k
    yych = *++YYCURSOR;
1352
10.2k
    if (yych <= '@') {
1353
4.15k
      if (yych <= '/') goto yy110;
1354
4.15k
      if (yych >= ':') goto yy110;
1355
6.08k
    } else {
1356
6.08k
      if (yych <= 'F') goto yy130;
1357
1.00k
      if (yych <= '`') goto yy110;
1358
1.00k
      if (yych >= 'g') goto yy110;
1359
1.00k
    }
1360
10.2k
yy130:
1361
10.2k
    yych = *++YYCURSOR;
1362
10.2k
    if (yych <= '@') {
1363
4.37k
      if (yych <= '/') goto yy110;
1364
4.37k
      if (yych >= ':') goto yy110;
1365
5.86k
    } else {
1366
5.86k
      if (yych <= 'F') goto yy131;
1367
2.81k
      if (yych <= '`') goto yy110;
1368
2.81k
      if (yych >= 'g') goto yy110;
1369
2.81k
    }
1370
10.2k
yy131:
1371
10.2k
    ++YYCURSOR;
1372
10.2k
    {
1373
10.2k
    int utf32, utf16_hi, utf16_lo;
1374
10.2k
    utf16_hi = php_json_ucs2_to_int(s, 4);
1375
10.2k
    utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
1376
10.2k
    utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
1377
10.2k
    PHP_JSON_SCANNER_COPY_UTF_SP();
1378
10.2k
    *(s->pstr++) = (unsigned char) (0xf0 | (utf32 >> 18));
1379
10.2k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 12) & 0x3f));
1380
10.2k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 6) & 0x3f));
1381
10.2k
    *(s->pstr++) = (unsigned char) (0x80 | (utf32 & 0x3f));
1382
10.2k
    s->str_start = s->cursor;
1383
10.2k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1384
10.2k
  }
1385
/* *********************************** */
1386
35.6M
yyc_STR_P2_UTF:
1387
35.6M
    yych = *YYCURSOR;
1388
35.6M
    if (yych == '"') goto yy133;
1389
35.5M
    if (yych == '\\') goto yy134;
1390
35.5M
    ++YYCURSOR;
1391
35.5M
    { PHP_JSON_CONDITION_GOTO(STR_P2_UTF); }
1392
26.0k
yy133:
1393
26.0k
    ++YYCURSOR;
1394
26.0k
    YYSETCONDITION(yycJS);
1395
26.0k
    {
1396
26.0k
    PHP_JSON_SCANNER_COPY_ESC();
1397
26.0k
    return PHP_JSON_T_STRING;
1398
35.5M
  }
1399
67.3k
yy134:
1400
67.3k
    yych = *(YYMARKER = ++YYCURSOR);
1401
67.3k
    if (yych == 'u') goto yy136;
1402
11.7k
yy135:
1403
11.7k
    {
1404
11.7k
    unsigned char esc;
1405
11.7k
    PHP_JSON_SCANNER_COPY_ESC();
1406
11.7k
    switch (*s->cursor) {
1407
1.08k
      case 'b':
1408
1.08k
        esc = '\b';
1409
1.08k
        break;
1410
2.02k
      case 'f':
1411
2.02k
        esc = '\f';       break;
1412
999
      case 'n':
1413
999
        esc = '\n';
1414
999
        break;
1415
675
      case 'r':
1416
675
        esc = '\r';
1417
675
        break;
1418
1.10k
      case 't':
1419
1.10k
        esc = '\t';
1420
1.10k
        break;
1421
3.57k
      case '\\':
1422
5.05k
      case '/':
1423
5.87k
      case '"':
1424
5.87k
        esc = *s->cursor;
1425
5.87k
        break;
1426
0
      default:
1427
0
        s->errcode = PHP_JSON_ERROR_SYNTAX;
1428
0
        return PHP_JSON_T_ERROR;
1429
11.7k
    }
1430
11.7k
    *(s->pstr++) = esc;
1431
11.7k
    ++YYCURSOR;
1432
11.7k
    s->str_start = s->cursor;
1433
11.7k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1434
11.7k
  }
1435
55.5k
yy136:
1436
55.5k
    yych = *++YYCURSOR;
1437
55.5k
    if (yych <= 'D') {
1438
49.2k
      if (yych <= '9') {
1439
42.2k
        if (yych <= '/') goto yy137;
1440
42.2k
        if (yych <= '0') goto yy138;
1441
2.29k
        goto yy139;
1442
42.2k
      } else {
1443
7.08k
        if (yych <= '@') goto yy137;
1444
7.08k
        if (yych <= 'C') goto yy139;
1445
6.00k
        goto yy140;
1446
7.08k
      }
1447
49.2k
    } else {
1448
6.29k
      if (yych <= 'c') {
1449
4.02k
        if (yych <= 'F') goto yy139;
1450
3.56k
        if (yych >= 'a') goto yy139;
1451
3.56k
      } else {
1452
2.26k
        if (yych <= 'd') goto yy140;
1453
869
        if (yych <= 'f') goto yy139;
1454
869
      }
1455
6.29k
    }
1456
0
yy137:
1457
0
    YYCURSOR = YYMARKER;
1458
0
    goto yy135;
1459
39.9k
yy138:
1460
39.9k
    yych = *++YYCURSOR;
1461
39.9k
    if (yych <= '9') {
1462
38.7k
      if (yych <= '/') goto yy137;
1463
38.7k
      if (yych <= '0') goto yy141;
1464
7.94k
      if (yych <= '7') goto yy142;
1465
1.57k
      goto yy143;
1466
7.94k
    } else {
1467
1.17k
      if (yych <= 'F') {
1468
492
        if (yych <= '@') goto yy137;
1469
492
        goto yy143;
1470
684
      } else {
1471
684
        if (yych <= '`') goto yy137;
1472
684
        if (yych <= 'f') goto yy143;
1473
0
        goto yy137;
1474
684
      }
1475
1.17k
    }
1476
8.26k
yy139:
1477
8.26k
    yych = *++YYCURSOR;
1478
8.26k
    if (yych <= '@') {
1479
2.98k
      if (yych <= '/') goto yy137;
1480
2.98k
      if (yych <= '9') goto yy143;
1481
0
      goto yy137;
1482
5.28k
    } else {
1483
5.28k
      if (yych <= 'F') goto yy143;
1484
4.04k
      if (yych <= '`') goto yy137;
1485
4.04k
      if (yych <= 'f') goto yy143;
1486
0
      goto yy137;
1487
4.04k
    }
1488
7.40k
yy140:
1489
7.40k
    yych = *++YYCURSOR;
1490
7.40k
    if (yych <= '@') {
1491
2.94k
      if (yych <= '/') goto yy137;
1492
2.94k
      if (yych <= '7') goto yy143;
1493
1.27k
      if (yych <= '9') goto yy144;
1494
0
      goto yy137;
1495
4.45k
    } else {
1496
4.45k
      if (yych <= 'B') goto yy144;
1497
265
      if (yych <= '`') goto yy137;
1498
265
      if (yych <= 'b') goto yy144;
1499
0
      goto yy137;
1500
265
    }
1501
30.8k
yy141:
1502
30.8k
    yych = *++YYCURSOR;
1503
30.8k
    if (yych <= '@') {
1504
25.3k
      if (yych <= '/') goto yy137;
1505
25.3k
      if (yych <= '7') goto yy145;
1506
1.26k
      if (yych <= '9') goto yy146;
1507
0
      goto yy137;
1508
5.43k
    } else {
1509
5.43k
      if (yych <= 'F') goto yy146;
1510
4.16k
      if (yych <= '`') goto yy137;
1511
4.16k
      if (yych <= 'f') goto yy146;
1512
0
      goto yy137;
1513
4.16k
    }
1514
6.36k
yy142:
1515
6.36k
    yych = *++YYCURSOR;
1516
6.36k
    if (yych <= '@') {
1517
1.06k
      if (yych <= '/') goto yy137;
1518
1.06k
      if (yych <= '9') goto yy146;
1519
0
      goto yy137;
1520
5.30k
    } else {
1521
5.30k
      if (yych <= 'F') goto yy146;
1522
880
      if (yych <= '`') goto yy137;
1523
880
      if (yych <= 'f') goto yy146;
1524
0
      goto yy137;
1525
880
    }
1526
12.6k
yy143:
1527
12.6k
    yych = *++YYCURSOR;
1528
12.6k
    if (yych <= '@') {
1529
6.82k
      if (yych <= '/') goto yy137;
1530
6.82k
      if (yych <= '9') goto yy147;
1531
0
      goto yy137;
1532
6.82k
    } else {
1533
5.87k
      if (yych <= 'F') goto yy147;
1534
4.35k
      if (yych <= '`') goto yy137;
1535
4.35k
      if (yych <= 'f') goto yy147;
1536
0
      goto yy137;
1537
4.35k
    }
1538
5.72k
yy144:
1539
5.72k
    yych = *++YYCURSOR;
1540
5.72k
    if (yych <= '@') {
1541
1.41k
      if (yych <= '/') goto yy137;
1542
1.41k
      if (yych <= '9') goto yy148;
1543
0
      goto yy137;
1544
4.31k
    } else {
1545
4.31k
      if (yych <= 'F') goto yy148;
1546
531
      if (yych <= '`') goto yy137;
1547
531
      if (yych <= 'f') goto yy148;
1548
0
      goto yy137;
1549
531
    }
1550
24.1k
yy145:
1551
24.1k
    yych = *++YYCURSOR;
1552
24.1k
    if (yych <= '@') {
1553
20.5k
      if (yych <= '/') goto yy137;
1554
20.5k
      if (yych <= '9') goto yy149;
1555
0
      goto yy137;
1556
20.5k
    } else {
1557
3.58k
      if (yych <= 'F') goto yy149;
1558
1.61k
      if (yych <= '`') goto yy137;
1559
1.61k
      if (yych <= 'f') goto yy149;
1560
0
      goto yy137;
1561
1.61k
    }
1562
13.0k
yy146:
1563
13.0k
    yych = *++YYCURSOR;
1564
13.0k
    if (yych <= '@') {
1565
4.77k
      if (yych <= '/') goto yy137;
1566
4.77k
      if (yych <= '9') goto yy150;
1567
0
      goto yy137;
1568
8.29k
    } else {
1569
8.29k
      if (yych <= 'F') goto yy150;
1570
3.56k
      if (yych <= '`') goto yy137;
1571
3.56k
      if (yych <= 'f') goto yy150;
1572
0
      goto yy137;
1573
3.56k
    }
1574
12.6k
yy147:
1575
12.6k
    yych = *++YYCURSOR;
1576
12.6k
    if (yych <= '@') {
1577
5.45k
      if (yych <= '/') goto yy137;
1578
5.45k
      if (yych <= '9') goto yy151;
1579
0
      goto yy137;
1580
7.23k
    } else {
1581
7.23k
      if (yych <= 'F') goto yy151;
1582
3.99k
      if (yych <= '`') goto yy137;
1583
3.99k
      if (yych <= 'f') goto yy151;
1584
0
      goto yy137;
1585
3.99k
    }
1586
5.72k
yy148:
1587
5.72k
    yych = *++YYCURSOR;
1588
5.72k
    if (yych <= '@') {
1589
1.33k
      if (yych <= '/') goto yy137;
1590
1.33k
      if (yych <= '9') goto yy152;
1591
0
      goto yy137;
1592
4.39k
    } else {
1593
4.39k
      if (yych <= 'F') goto yy152;
1594
307
      if (yych <= '`') goto yy137;
1595
307
      if (yych <= 'f') goto yy152;
1596
0
      goto yy137;
1597
307
    }
1598
24.1k
yy149:
1599
24.1k
    ++YYCURSOR;
1600
24.1k
    {
1601
24.1k
    int utf16 = php_json_ucs2_to_int(s, 2);
1602
24.1k
    PHP_JSON_SCANNER_COPY_UTF();
1603
24.1k
    *(s->pstr++) = (unsigned char) utf16;
1604
24.1k
    s->str_start = s->cursor;
1605
24.1k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1606
24.1k
  }
1607
13.0k
yy150:
1608
13.0k
    ++YYCURSOR;
1609
13.0k
    {
1610
13.0k
    int utf16 = php_json_ucs2_to_int(s, 3);
1611
13.0k
    PHP_JSON_SCANNER_COPY_UTF();
1612
13.0k
    *(s->pstr++) = (unsigned char) (0xc0 | (utf16 >> 6));
1613
13.0k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1614
13.0k
    s->str_start = s->cursor;
1615
13.0k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1616
13.0k
  }
1617
12.6k
yy151:
1618
12.6k
    ++YYCURSOR;
1619
12.6k
    {
1620
12.6k
    int utf16 = php_json_ucs2_to_int(s, 4);
1621
12.6k
    PHP_JSON_SCANNER_COPY_UTF();
1622
12.6k
    *(s->pstr++) = (unsigned char) (0xe0 | (utf16 >> 12));
1623
12.6k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf16 >> 6) & 0x3f));
1624
12.6k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1625
12.6k
    s->str_start = s->cursor;
1626
12.6k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1627
12.6k
  }
1628
5.72k
yy152:
1629
5.72k
    yych = *++YYCURSOR;
1630
5.72k
    if (yych != '\\') goto yy137;
1631
5.72k
    yych = *++YYCURSOR;
1632
5.72k
    if (yych != 'u') goto yy137;
1633
5.72k
    yych = *++YYCURSOR;
1634
5.72k
    if (yych == 'D') goto yy153;
1635
621
    if (yych != 'd') goto yy137;
1636
5.72k
yy153:
1637
5.72k
    yych = *++YYCURSOR;
1638
5.72k
    if (yych <= 'B') goto yy137;
1639
5.72k
    if (yych <= 'F') goto yy154;
1640
622
    if (yych <= 'b') goto yy137;
1641
622
    if (yych >= 'g') goto yy137;
1642
5.72k
yy154:
1643
5.72k
    yych = *++YYCURSOR;
1644
5.72k
    if (yych <= '@') {
1645
1.70k
      if (yych <= '/') goto yy137;
1646
1.70k
      if (yych >= ':') goto yy137;
1647
4.01k
    } else {
1648
4.01k
      if (yych <= 'F') goto yy155;
1649
1.00k
      if (yych <= '`') goto yy137;
1650
1.00k
      if (yych >= 'g') goto yy137;
1651
1.00k
    }
1652
5.72k
yy155:
1653
5.72k
    yych = *++YYCURSOR;
1654
5.72k
    if (yych <= '@') {
1655
1.84k
      if (yych <= '/') goto yy137;
1656
1.84k
      if (yych >= ':') goto yy137;
1657
3.88k
    } else {
1658
3.88k
      if (yych <= 'F') goto yy156;
1659
1.03k
      if (yych <= '`') goto yy137;
1660
1.03k
      if (yych >= 'g') goto yy137;
1661
1.03k
    }
1662
5.72k
yy156:
1663
5.72k
    ++YYCURSOR;
1664
5.72k
    {
1665
5.72k
    int utf32, utf16_hi, utf16_lo;
1666
5.72k
    utf16_hi = php_json_ucs2_to_int(s, 4);
1667
5.72k
    utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
1668
5.72k
    utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
1669
5.72k
    PHP_JSON_SCANNER_COPY_UTF_SP();
1670
5.72k
    *(s->pstr++) = (unsigned char) (0xf0 | (utf32 >> 18));
1671
5.72k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 12) & 0x3f));
1672
5.72k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 6) & 0x3f));
1673
5.72k
    *(s->pstr++) = (unsigned char) (0x80 | (utf32 & 0x3f));
1674
5.72k
    s->str_start = s->cursor;
1675
5.72k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1676
5.72k
  }
1677
5.72k
  }
1678
1679
1680
5.72k
}