Coverage Report

Created: 2026-01-18 06:46

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 1.3 */
2
/*
3
  +----------------------------------------------------------------------+
4
  | Copyright (c) The PHP Group                                          |
5
  +----------------------------------------------------------------------+
6
  | This source file is subject to version 3.01 of the PHP license,      |
7
  | that is bundled with this package in the file LICENSE, and is        |
8
  | available through the world-wide-web at the following url:           |
9
  | https://www.php.net/license/3_01.txt                                 |
10
  | If you did not receive a copy of the PHP license and are unable to   |
11
  | obtain it through the world-wide-web, please send a note to          |
12
  | license@php.net so we can mail you a copy immediately.               |
13
  +----------------------------------------------------------------------+
14
  | Author: Jakub Zelenka <bukka@php.net>                                |
15
  +----------------------------------------------------------------------+
16
*/
17
18
#include "php.h"
19
#include "php_json_scanner.h"
20
#include "php_json_scanner_defs.h"
21
#include "php_json_parser.h"
22
#include "json_parser.tab.h"
23
24
10.2M
#define YYCTYPE     php_json_ctype
25
192M
#define YYCURSOR    s->cursor
26
#define YYLIMIT     s->limit
27
92.3M
#define YYMARKER    s->marker
28
#define YYCTXMARKER s->ctxmarker
29
30
20.4M
#define YYGETCONDITION()        s->state
31
132k
#define YYSETCONDITION(yystate) s->state = yystate
32
33
#define YYFILL(n)
34
35
129k
#define PHP_JSON_CONDITION_SET(condition) YYSETCONDITION(yyc##condition)
36
38.5M
#define PHP_JSON_CONDITION_GOTO(condition) goto yyc_##condition
37
#define PHP_JSON_CONDITION_SET_AND_GOTO(condition) \
38
60.8k
  PHP_JSON_CONDITION_SET(condition); \
39
60.8k
  PHP_JSON_CONDITION_GOTO(condition)
40
#define PHP_JSON_CONDITION_GOTO_STR_P2() \
41
79.5k
  do { \
42
79.5k
    if (s->utf8_invalid) { \
43
0
      PHP_JSON_CONDITION_GOTO(STR_P2_BIN); \
44
79.5k
    } else { \
45
79.5k
      PHP_JSON_CONDITION_GOTO(STR_P2_UTF); \
46
79.5k
    } \
47
79.5k
  } while(0)
48
49
50
13.2k
#define PHP_JSON_SCANNER_COPY_ESC() php_json_scanner_copy_string(s, 0)
51
64.6k
#define PHP_JSON_SCANNER_COPY_UTF() php_json_scanner_copy_string(s, 5)
52
1.58k
#define PHP_JSON_SCANNER_COPY_UTF_SP() php_json_scanner_copy_string(s, 11)
53
54
278k
#define PHP_JSON_INT_MAX_LENGTH (MAX_LENGTH_OF_LONG - 1)
55
56
296k
#define PHP_JSON_TOKEN_LENGTH() ((size_t) (s->cursor - s->token))
57
57.2M
#define PHP_JSON_TOKEN_LOCATION(location) (s)->errloc.location
58
59
static void php_json_scanner_copy_string(php_json_scanner *s, size_t esc_size)
60
79.5k
{
61
79.5k
  size_t len = (size_t)(s->cursor - s->str_start - esc_size - 1);
62
79.5k
  if (len) {
63
30.6k
    memcpy(s->pstr, s->str_start, len);
64
30.6k
    s->pstr += len;
65
30.6k
  }
66
79.5k
}
67
68
static int php_json_hex_to_int(unsigned char code)
69
199k
{
70
199k
  if (code >= '0' && code <= '9') {
71
92.3k
    return code - '0';
72
107k
  } else if (code >= 'A' && code <= 'F') {
73
82.1k
    return code - ('A' - 10);
74
82.1k
  } else if (code >= 'a' && code <= 'f') {
75
24.9k
    return code - ('a' - 10);
76
24.9k
  } else {
77
    /* this should never happened (just to suppress compiler warning) */
78
0
    return -1;
79
0
  }
80
199k
}
81
82
static int php_json_ucs2_to_int_ex(php_json_scanner *s, int size, int start)
83
67.8k
{
84
67.8k
  int i, code = 0;
85
67.8k
  php_json_ctype *pc = s->cursor - start;
86
267k
  for (i = 0; i < size; i++) {
87
199k
    code |= php_json_hex_to_int(*(pc--)) << (i * 4);
88
199k
  }
89
67.8k
  return code;
90
67.8k
}
91
92
static int php_json_ucs2_to_int(php_json_scanner *s, int size)
93
66.2k
{
94
66.2k
  return php_json_ucs2_to_int_ex(s, size, 1);
95
66.2k
}
96
97
void php_json_scanner_init(php_json_scanner *s, const char *str, size_t str_len, int options)
98
12.9k
{
99
12.9k
  s->cursor = (php_json_ctype *) str;
100
12.9k
  s->limit = (php_json_ctype *) str + str_len;
101
12.9k
  s->options = options;
102
12.9k
  PHP_JSON_TOKEN_LOCATION(first_column) = 1;
103
12.9k
  PHP_JSON_TOKEN_LOCATION(first_line) = 1;
104
12.9k
  PHP_JSON_TOKEN_LOCATION(last_column) = 1;
105
12.9k
  PHP_JSON_TOKEN_LOCATION(last_line) = 1;
106
12.9k
  PHP_JSON_CONDITION_SET(JS);
107
12.9k
}
108
109
int php_json_scan(php_json_scanner *s)
110
10.2M
{
111
10.2M
  ZVAL_NULL(&s->value);
112
113
10.2M
std:
114
10.2M
  PHP_JSON_TOKEN_LOCATION(first_column) = s->errloc.last_column;
115
10.2M
  PHP_JSON_TOKEN_LOCATION(first_line) = s->errloc.last_line;
116
10.2M
  s->token = s->cursor;
117
118
119
10.2M
  {
120
10.2M
    YYCTYPE yych;
121
10.2M
    unsigned int yyaccept = 0;
122
10.2M
    if (YYGETCONDITION() < 2) {
123
10.2M
      if (YYGETCONDITION() < 1) {
124
10.2M
        goto yyc_JS;
125
10.2M
      } else {
126
0
        goto yyc_STR_P1;
127
0
      }
128
10.2M
    } else {
129
0
      if (YYGETCONDITION() < 3) {
130
0
        goto yyc_STR_P2_BIN;
131
0
      } else {
132
0
        goto yyc_STR_P2_UTF;
133
0
      }
134
0
    }
135
/* *********************************** */
136
10.2M
yyc_JS:
137
10.2M
    {
138
10.2M
      static const unsigned char yybm[] = {
139
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
140
10.2M
          0,  64,   0,   0,   0,  64,   0,   0, 
141
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
142
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
143
10.2M
         64,   0,   0,   0,   0,   0,   0,   0, 
144
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
145
10.2M
        128, 128, 128, 128, 128, 128, 128, 128, 
146
10.2M
        128, 128,   0,   0,   0,   0,   0,   0, 
147
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
148
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
149
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
150
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
151
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
152
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
153
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
154
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
155
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
156
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
157
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
158
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
159
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
160
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
161
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
162
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
163
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
164
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
165
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
166
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
167
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
168
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
169
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
170
10.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
171
10.2M
      };
172
10.2M
      yych = *YYCURSOR;
173
10.2M
      if (yych <= ']') {
174
3.88M
        if (yych <= '"') {
175
70.0k
          if (yych <= '\f') {
176
8.44k
            if (yych <= 0x08) {
177
7.56k
              if (yych >= 0x01) goto yy5;
178
7.56k
            } else {
179
876
              if (yych <= '\t') goto yy7;
180
639
              if (yych <= '\n') goto yy10;
181
7
              goto yy5;
182
639
            }
183
61.6k
          } else {
184
61.6k
            if (yych <= 0x1F) {
185
459
              if (yych <= '\r') goto yy12;
186
35
              goto yy5;
187
61.1k
            } else {
188
61.1k
              if (yych <= ' ') goto yy7;
189
60.8k
              if (yych <= '!') goto yy13;
190
60.8k
              goto yy15;
191
60.8k
            }
192
61.6k
          }
193
3.81M
        } else {
194
3.81M
          if (yych <= '0') {
195
3.48M
            if (yych <= ',') {
196
3.45M
              if (yych <= '+') goto yy13;
197
3.45M
              goto yy17;
198
3.45M
            } else {
199
37.4k
              if (yych <= '-') goto yy19;
200
36.3k
              if (yych <= '/') goto yy13;
201
36.2k
              goto yy20;
202
36.3k
            }
203
3.48M
          } else {
204
327k
            if (yych <= 'Z') {
205
313k
              if (yych <= '9') goto yy22;
206
55.0k
              if (yych <= ':') goto yy24;
207
115
              goto yy13;
208
55.0k
            } else {
209
13.8k
              if (yych <= '[') goto yy26;
210
5.90k
              if (yych <= '\\') goto yy13;
211
5.88k
              goto yy28;
212
5.90k
            }
213
327k
          }
214
3.81M
        }
215
6.34M
      } else {
216
6.34M
        if (yych <= '}') {
217
6.34M
          if (yych <= 's') {
218
727
            if (yych <= 'f') {
219
434
              if (yych <= 'e') goto yy13;
220
260
              goto yy30;
221
434
            } else {
222
293
              if (yych == 'n') goto yy31;
223
28
              goto yy13;
224
293
            }
225
6.34M
          } else {
226
6.34M
            if (yych <= 'z') {
227
272
              if (yych <= 't') goto yy32;
228
23
              goto yy13;
229
6.34M
            } else {
230
6.34M
              if (yych <= '{') goto yy33;
231
3.17M
              if (yych <= '|') goto yy13;
232
3.17M
              goto yy35;
233
3.17M
            }
234
6.34M
          }
235
6.34M
        } else {
236
493
          if (yych <= 0xEC) {
237
257
            if (yych <= 0xC1) {
238
83
              if (yych <= 0x7F) goto yy13;
239
74
              goto yy37;
240
174
            } else {
241
174
              if (yych <= 0xDF) goto yy39;
242
87
              if (yych <= 0xE0) goto yy40;
243
48
              goto yy41;
244
87
            }
245
257
          } else {
246
236
            if (yych <= 0xF0) {
247
118
              if (yych <= 0xED) goto yy42;
248
79
              if (yych <= 0xEF) goto yy41;
249
57
              goto yy43;
250
118
            } else {
251
118
              if (yych <= 0xF3) goto yy44;
252
63
              if (yych <= 0xF4) goto yy45;
253
24
              goto yy37;
254
63
            }
255
236
          }
256
493
        }
257
6.34M
      }
258
7.54k
      ++YYCURSOR;
259
7.54k
      {
260
7.54k
    if (s->limit < s->cursor) {
261
7.52k
      return PHP_JSON_T_EOI;
262
7.52k
    } else {
263
19
      s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
264
19
      return PHP_JSON_T_ERROR;
265
19
    }
266
7.54k
  }
267
67
yy5:
268
67
      ++YYCURSOR;
269
67
      {
270
67
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
271
67
    return PHP_JSON_T_ERROR;
272
7.54k
  }
273
745
yy7:
274
745
      yych = *++YYCURSOR;
275
975
yy8:
276
975
      if (yybm[0+yych] & 64) {
277
196
        goto yy7;
278
196
      }
279
779
      {
280
779
    PHP_JSON_TOKEN_LOCATION(last_column) += PHP_JSON_TOKEN_LENGTH();
281
779
    goto std;
282
975
  }
283
826
yy10:
284
826
      ++YYCURSOR;
285
826
      {
286
826
    PHP_JSON_TOKEN_LOCATION(last_line)++;
287
826
    PHP_JSON_TOKEN_LOCATION(last_column) = 1;
288
826
    goto std;
289
975
  }
290
424
yy12:
291
424
      yych = *++YYCURSOR;
292
424
      if (yych == '\n') goto yy10;
293
230
      goto yy8;
294
537
yy13:
295
537
      ++YYCURSOR;
296
759
yy14:
297
759
      {
298
759
    s->errcode = PHP_JSON_ERROR_SYNTAX;
299
759
    return PHP_JSON_T_ERROR;
300
537
  }
301
60.8k
yy15:
302
60.8k
      ++YYCURSOR;
303
60.8k
      {
304
60.8k
    PHP_JSON_TOKEN_LOCATION(last_column)++;
305
60.8k
    s->str_start = s->cursor;
306
60.8k
    s->str_esc = 0;
307
60.8k
    s->utf8_invalid = 0;
308
60.8k
    s->utf8_invalid_count = 0;
309
60.8k
    PHP_JSON_CONDITION_SET_AND_GOTO(STR_P1);
310
537
  }
311
3.45M
yy17:
312
3.45M
      ++YYCURSOR;
313
3.45M
      { 
314
3.45M
    PHP_JSON_TOKEN_LOCATION(last_column)++;
315
3.45M
    return ','; 
316
537
  }
317
1.10k
yy19:
318
1.10k
      yych = *++YYCURSOR;
319
1.10k
      if (yych <= '/') goto yy14;
320
1.08k
      if (yych <= '0') goto yy20;
321
773
      if (yych <= '9') goto yy22;
322
17
      goto yy14;
323
36.5k
yy20:
324
36.5k
      yyaccept = 0;
325
36.5k
      yych = *(YYMARKER = ++YYCURSOR);
326
36.5k
      if (yych <= 'D') {
327
33.1k
        if (yych == '.') goto yy46;
328
33.1k
      } else {
329
3.40k
        if (yych <= 'E') goto yy48;
330
3.09k
        if (yych == 'e') goto yy48;
331
3.09k
      }
332
275k
yy21:
333
275k
      {
334
275k
    bool bigint = 0, negative = s->token[0] == '-';
335
275k
    size_t digits = PHP_JSON_TOKEN_LENGTH();
336
275k
    PHP_JSON_TOKEN_LOCATION(last_column) += digits;
337
275k
    digits -= negative;
338
275k
    if (digits >= PHP_JSON_INT_MAX_LENGTH) {
339
2.73k
      if (digits == PHP_JSON_INT_MAX_LENGTH) {
340
896
        int cmp = strncmp((char *) (s->token + negative), LONG_MIN_DIGITS, PHP_JSON_INT_MAX_LENGTH);
341
896
        if (!(cmp < 0 || (cmp == 0 && negative))) {
342
468
          bigint = 1;
343
468
        }
344
1.84k
      } else {
345
1.84k
        bigint = 1;
346
1.84k
      }
347
2.73k
    }
348
275k
    if (!bigint) {
349
272k
      ZVAL_LONG(&s->value, ZEND_STRTOL((char *) s->token, NULL, 10));
350
272k
      return PHP_JSON_T_INT;
351
272k
    } else if (s->options & PHP_JSON_BIGINT_AS_STRING) {
352
0
      ZVAL_STRINGL(&s->value, (char *) s->token, (size_t)(s->cursor - s->token));
353
0
      return PHP_JSON_T_STRING;
354
2.30k
    } else {
355
2.30k
      ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
356
2.30k
      return PHP_JSON_T_DOUBLE;
357
2.30k
    }
358
275k
  }
359
24.2M
yy22:
360
24.2M
      yyaccept = 0;
361
24.2M
      yych = *(YYMARKER = ++YYCURSOR);
362
24.2M
      if (yybm[0+yych] & 128) {
363
24.0M
        goto yy22;
364
24.0M
      }
365
259k
      if (yych <= 'D') {
366
245k
        if (yych == '.') goto yy46;
367
238k
        goto yy21;
368
245k
      } else {
369
13.5k
        if (yych <= 'E') goto yy48;
370
12.0k
        if (yych == 'e') goto yy48;
371
2.41k
        goto yy21;
372
12.0k
      }
373
54.9k
yy24:
374
54.9k
      ++YYCURSOR;
375
54.9k
      { 
376
54.9k
    PHP_JSON_TOKEN_LOCATION(last_column)++;
377
54.9k
    return ':'; 
378
259k
  }
379
7.92k
yy26:
380
7.92k
      ++YYCURSOR;
381
7.92k
      { 
382
7.92k
    PHP_JSON_TOKEN_LOCATION(last_column)++;
383
7.92k
    return '['; 
384
259k
  }
385
5.88k
yy28:
386
5.88k
      ++YYCURSOR;
387
5.88k
      { 
388
5.88k
    PHP_JSON_TOKEN_LOCATION(last_column)++;
389
5.88k
    return ']'; 
390
259k
  }
391
260
yy30:
392
260
      yyaccept = 1;
393
260
      yych = *(YYMARKER = ++YYCURSOR);
394
260
      if (yych == 'a') goto yy49;
395
19
      goto yy14;
396
265
yy31:
397
265
      yyaccept = 1;
398
265
      yych = *(YYMARKER = ++YYCURSOR);
399
265
      if (yych == 'u') goto yy50;
400
25
      goto yy14;
401
249
yy32:
402
249
      yyaccept = 1;
403
249
      yych = *(YYMARKER = ++YYCURSOR);
404
249
      if (yych == 'r') goto yy51;
405
23
      goto yy14;
406
3.17M
yy33:
407
3.17M
      ++YYCURSOR;
408
3.17M
      { 
409
3.17M
    PHP_JSON_TOKEN_LOCATION(last_column)++;
410
3.17M
    return '{'; 
411
249
  }
412
3.17M
yy35:
413
3.17M
      ++YYCURSOR;
414
3.17M
      { 
415
3.17M
    PHP_JSON_TOKEN_LOCATION(last_column)++;
416
3.17M
    return '}';
417
249
  }
418
98
yy37:
419
98
      ++YYCURSOR;
420
446
yy38:
421
446
      {
422
446
    s->errcode = PHP_JSON_ERROR_UTF8;
423
446
    return PHP_JSON_T_ERROR;
424
98
  }
425
87
yy39:
426
87
      yych = *++YYCURSOR;
427
87
      if (yych <= 0x7F) goto yy38;
428
38
      if (yych <= 0xBF) goto yy13;
429
21
      goto yy38;
430
39
yy40:
431
39
      yyaccept = 2;
432
39
      yych = *(YYMARKER = ++YYCURSOR);
433
39
      if (yych <= 0x9F) goto yy38;
434
20
      if (yych <= 0xBF) goto yy52;
435
5
      goto yy38;
436
70
yy41:
437
70
      yyaccept = 2;
438
70
      yych = *(YYMARKER = ++YYCURSOR);
439
70
      if (yych <= 0x7F) goto yy38;
440
50
      if (yych <= 0xBF) goto yy52;
441
21
      goto yy38;
442
39
yy42:
443
39
      yyaccept = 2;
444
39
      yych = *(YYMARKER = ++YYCURSOR);
445
39
      if (yych <= 0x7F) goto yy38;
446
36
      if (yych <= 0x9F) goto yy52;
447
15
      goto yy38;
448
57
yy43:
449
57
      yyaccept = 2;
450
57
      yych = *(YYMARKER = ++YYCURSOR);
451
57
      if (yych <= 0x8F) goto yy38;
452
34
      if (yych <= 0xBF) goto yy53;
453
11
      goto yy38;
454
55
yy44:
455
55
      yyaccept = 2;
456
55
      yych = *(YYMARKER = ++YYCURSOR);
457
55
      if (yych <= 0x7F) goto yy38;
458
46
      if (yych <= 0xBF) goto yy53;
459
15
      goto yy38;
460
39
yy45:
461
39
      yyaccept = 2;
462
39
      yych = *(YYMARKER = ++YYCURSOR);
463
39
      if (yych <= 0x7F) goto yy38;
464
36
      if (yych <= 0x8F) goto yy53;
465
17
      goto yy38;
466
8.79k
yy46:
467
8.79k
      yych = *++YYCURSOR;
468
8.79k
      if (yych <= '/') goto yy47;
469
8.76k
      if (yych <= '9') goto yy54;
470
475
yy47:
471
475
      YYCURSOR = YYMARKER;
472
475
      if (yyaccept <= 1) {
473
279
        if (yyaccept == 0) {
474
162
          goto yy21;
475
162
        } else {
476
117
          goto yy14;
477
117
        }
478
279
      } else {
479
196
        if (yyaccept == 2) {
480
117
          goto yy38;
481
117
        } else {
482
79
          goto yy56;
483
79
        }
484
196
      }
485
14.1k
yy48:
486
14.1k
      yych = *++YYCURSOR;
487
14.1k
      if (yych <= ',') {
488
396
        if (yych == '+') goto yy57;
489
128
        goto yy47;
490
13.7k
      } else {
491
13.7k
        if (yych <= '-') goto yy57;
492
8.27k
        if (yych <= '/') goto yy47;
493
8.26k
        if (yych <= '9') goto yy58;
494
28
        goto yy47;
495
8.26k
      }
496
241
yy49:
497
241
      yych = *++YYCURSOR;
498
241
      if (yych == 'l') goto yy60;
499
21
      goto yy47;
500
240
yy50:
501
240
      yych = *++YYCURSOR;
502
240
      if (yych == 'l') goto yy61;
503
23
      goto yy47;
504
226
yy51:
505
226
      yych = *++YYCURSOR;
506
226
      if (yych == 'u') goto yy62;
507
7
      goto yy47;
508
82
yy52:
509
82
      yych = *++YYCURSOR;
510
82
      if (yych <= 0x7F) goto yy47;
511
28
      if (yych <= 0xBF) goto yy13;
512
7
      goto yy47;
513
73
yy53:
514
73
      yych = *++YYCURSOR;
515
73
      if (yych <= 0x7F) goto yy47;
516
30
      if (yych <= 0xBF) goto yy52;
517
13
      goto yy47;
518
67.8M
yy54:
519
67.8M
      yyaccept = 3;
520
67.8M
      yych = *(YYMARKER = ++YYCURSOR);
521
67.8M
      if (yych <= 'D') {
522
67.8M
        if (yych <= '/') goto yy56;
523
67.8M
        if (yych <= '9') goto yy54;
524
67.8M
      } else {
525
2.64k
        if (yych <= 'E') goto yy48;
526
2.34k
        if (yych == 'e') goto yy48;
527
2.34k
      }
528
20.7k
yy56:
529
20.7k
      {
530
20.7k
    PHP_JSON_TOKEN_LOCATION(last_column) += PHP_JSON_TOKEN_LENGTH();
531
20.7k
    ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
532
20.7k
    return PHP_JSON_T_DOUBLE;
533
67.8M
  }
534
5.78k
yy57:
535
5.78k
      yych = *++YYCURSOR;
536
5.78k
      if (yych <= '/') goto yy47;
537
5.75k
      if (yych >= ':') goto yy47;
538
2.64M
yy58:
539
2.64M
      yych = *++YYCURSOR;
540
2.64M
      if (yych <= '/') goto yy56;
541
2.63M
      if (yych <= '9') goto yy58;
542
264
      goto yy56;
543
264
yy60:
544
220
      yych = *++YYCURSOR;
545
220
      if (yych == 's') goto yy63;
546
19
      goto yy47;
547
217
yy61:
548
217
      yych = *++YYCURSOR;
549
217
      if (yych == 'l') goto yy64;
550
19
      goto yy47;
551
219
yy62:
552
219
      yych = *++YYCURSOR;
553
219
      if (yych == 'e') goto yy66;
554
23
      goto yy47;
555
201
yy63:
556
201
      yych = *++YYCURSOR;
557
201
      if (yych == 'e') goto yy68;
558
5
      goto yy47;
559
198
yy64:
560
198
      ++YYCURSOR;
561
198
      {
562
198
    PHP_JSON_TOKEN_LOCATION(last_column) += 4;
563
198
    ZVAL_NULL(&s->value);
564
198
    return PHP_JSON_T_NUL;
565
201
  }
566
196
yy66:
567
196
      ++YYCURSOR;
568
196
      {
569
196
    PHP_JSON_TOKEN_LOCATION(last_column) += 4;
570
196
    ZVAL_TRUE(&s->value);
571
196
    return PHP_JSON_T_TRUE;
572
201
  }
573
196
yy68:
574
196
      ++YYCURSOR;
575
196
      {
576
196
    PHP_JSON_TOKEN_LOCATION(last_column) += 5;
577
196
    ZVAL_FALSE(&s->value);
578
196
    return PHP_JSON_T_FALSE;
579
201
  }
580
201
    }
581
/* *********************************** */
582
26.4M
yyc_STR_P1:
583
26.4M
    yych = *YYCURSOR;
584
26.4M
    if (yych <= 0xDF) {
585
26.4M
      if (yych <= '[') {
586
10.5M
        if (yych <= 0x1F) goto yy72;
587
10.5M
        if (yych == '"') goto yy76;
588
10.5M
        goto yy74;
589
15.9M
      } else {
590
15.9M
        if (yych <= '\\') goto yy78;
591
15.8M
        if (yych <= 0x7F) goto yy74;
592
300
        if (yych <= 0xC1) goto yy80;
593
279
        goto yy82;
594
300
      }
595
26.4M
    } else {
596
1.90k
      if (yych <= 0xEF) {
597
795
        if (yych <= 0xE0) goto yy83;
598
555
        if (yych == 0xED) goto yy85;
599
273
        goto yy84;
600
1.10k
      } else {
601
1.10k
        if (yych <= 0xF0) goto yy86;
602
774
        if (yych <= 0xF3) goto yy87;
603
264
        if (yych <= 0xF4) goto yy88;
604
9
        goto yy80;
605
264
      }
606
1.90k
    }
607
474
yy72:
608
474
    ++YYCURSOR;
609
474
    {
610
474
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
611
474
    return PHP_JSON_T_ERROR;
612
26.4M
  }
613
26.3M
yy74:
614
26.3M
    ++YYCURSOR;
615
26.3M
    {
616
26.3M
    PHP_JSON_TOKEN_LOCATION(last_column)++;
617
26.3M
    PHP_JSON_CONDITION_GOTO(STR_P1);
618
26.4M
  }
619
58.5k
yy76:
620
58.5k
    ++YYCURSOR;
621
58.5k
    {
622
58.5k
    PHP_JSON_TOKEN_LOCATION(last_column)++;
623
58.5k
    zend_string *str;
624
58.5k
    size_t len = (size_t)(s->cursor - s->str_start - s->str_esc - 1 + s->utf8_invalid_count);
625
58.5k
    if (len == 0) {
626
19.5k
      PHP_JSON_CONDITION_SET(JS);
627
19.5k
      ZVAL_EMPTY_STRING(&s->value);
628
19.5k
      return PHP_JSON_T_ESTRING;
629
19.5k
    }
630
38.9k
    str = zend_string_alloc(len, 0);
631
38.9k
    ZSTR_VAL(str)[len] = '\0';
632
38.9k
    ZVAL_STR(&s->value, str);
633
38.9k
    if (s->str_esc || s->utf8_invalid) {
634
3.27k
      s->pstr = (php_json_ctype *) Z_STRVAL(s->value);
635
3.27k
      s->cursor = s->str_start;
636
3.27k
      PHP_JSON_CONDITION_GOTO_STR_P2();
637
35.7k
    } else {
638
35.7k
      memcpy(Z_STRVAL(s->value), s->str_start, len);
639
35.7k
      PHP_JSON_CONDITION_SET(JS);
640
35.7k
      return PHP_JSON_T_STRING;
641
35.7k
    }
642
38.9k
  }
643
82.8k
yy78:
644
82.8k
    yyaccept = 0;
645
82.8k
    yych = *(YYMARKER = ++YYCURSOR);
646
82.8k
    if (yych <= 'e') {
647
9.16k
      if (yych <= '/') {
648
7.43k
        if (yych == '"') goto yy89;
649
511
        if (yych >= '/') goto yy89;
650
1.73k
      } else {
651
1.73k
        if (yych <= '\\') {
652
1.22k
          if (yych >= '\\') goto yy89;
653
1.22k
        } else {
654
509
          if (yych == 'b') goto yy89;
655
509
        }
656
1.73k
      }
657
73.6k
    } else {
658
73.6k
      if (yych <= 'q') {
659
1.05k
        if (yych <= 'f') goto yy89;
660
471
        if (yych == 'n') goto yy89;
661
72.5k
      } else {
662
72.5k
        if (yych <= 's') {
663
534
          if (yych <= 'r') goto yy89;
664
72.0k
        } else {
665
72.0k
          if (yych <= 't') goto yy89;
666
71.5k
          if (yych <= 'u') goto yy91;
667
71.5k
        }
668
72.5k
      }
669
73.6k
    }
670
1.16k
yy79:
671
1.16k
    {
672
1.16k
    s->errcode = PHP_JSON_ERROR_SYNTAX;
673
1.16k
    return PHP_JSON_T_ERROR;
674
82.8k
  }
675
30
yy80:
676
30
    ++YYCURSOR;
677
381
yy81:
678
381
    {
679
381
    if (s->options & (PHP_JSON_INVALID_UTF8_IGNORE | PHP_JSON_INVALID_UTF8_SUBSTITUTE)) {
680
0
      if (s->options & PHP_JSON_INVALID_UTF8_SUBSTITUTE) {
681
0
        if (s->utf8_invalid_count > INT_MAX - 2) {
682
0
          s->errcode = PHP_JSON_ERROR_UTF8;
683
0
          return PHP_JSON_T_ERROR;
684
0
        }
685
0
        s->utf8_invalid_count += 2;
686
0
      } else {
687
0
        s->utf8_invalid_count--;
688
0
      }
689
0
      s->utf8_invalid = 1;
690
0
      PHP_JSON_CONDITION_GOTO(STR_P1);
691
0
    }
692
381
    s->errcode = PHP_JSON_ERROR_UTF8;
693
381
    return PHP_JSON_T_ERROR;
694
381
  }
695
279
yy82:
696
279
    yych = *++YYCURSOR;
697
279
    if (yych <= 0x7F) goto yy81;
698
266
    if (yych <= 0xBF) goto yy93;
699
18
    goto yy81;
700
240
yy83:
701
240
    yyaccept = 1;
702
240
    yych = *(YYMARKER = ++YYCURSOR);
703
240
    if (yych <= 0x9F) goto yy81;
704
223
    if (yych <= 0xBF) goto yy95;
705
7
    goto yy81;
706
273
yy84:
707
273
    yyaccept = 1;
708
273
    yych = *(YYMARKER = ++YYCURSOR);
709
273
    if (yych <= 0x7F) goto yy81;
710
260
    if (yych <= 0xBF) goto yy95;
711
7
    goto yy81;
712
282
yy85:
713
282
    yyaccept = 1;
714
282
    yych = *(YYMARKER = ++YYCURSOR);
715
282
    if (yych <= 0x7F) goto yy81;
716
279
    if (yych <= 0x9F) goto yy95;
717
15
    goto yy81;
718
334
yy86:
719
334
    yyaccept = 1;
720
334
    yych = *(YYMARKER = ++YYCURSOR);
721
334
    if (yych <= 0x8F) goto yy81;
722
329
    if (yych <= 0xBF) goto yy96;
723
13
    goto yy81;
724
510
yy87:
725
510
    yyaccept = 1;
726
510
    yych = *(YYMARKER = ++YYCURSOR);
727
510
    if (yych <= 0x7F) goto yy81;
728
507
    if (yych <= 0xBF) goto yy96;
729
21
    goto yy81;
730
255
yy88:
731
255
    yyaccept = 1;
732
255
    yych = *(YYMARKER = ++YYCURSOR);
733
255
    if (yych <= 0x7F) goto yy81;
734
252
    if (yych <= 0x8F) goto yy96;
735
13
    goto yy81;
736
11.1k
yy89:
737
11.1k
    ++YYCURSOR;
738
11.1k
    {
739
11.1k
    PHP_JSON_TOKEN_LOCATION(last_column) += 2;
740
11.1k
    s->str_esc++;
741
11.1k
    PHP_JSON_CONDITION_GOTO(STR_P1);
742
252
  }
743
71.5k
yy91:
744
71.5k
    yych = *++YYCURSOR;
745
71.5k
    if (yych <= 'D') {
746
67.4k
      if (yych <= '9') {
747
64.9k
        if (yych <= '/') goto yy92;
748
64.9k
        if (yych <= '0') goto yy97;
749
7.00k
        goto yy98;
750
64.9k
      } else {
751
2.48k
        if (yych <= '@') goto yy92;
752
2.47k
        if (yych <= 'C') goto yy98;
753
2.13k
        goto yy99;
754
2.47k
      }
755
67.4k
    } else {
756
4.14k
      if (yych <= 'c') {
757
1.18k
        if (yych <= 'F') goto yy98;
758
322
        if (yych >= 'a') goto yy98;
759
2.95k
      } else {
760
2.95k
        if (yych <= 'd') goto yy99;
761
526
        if (yych <= 'f') goto yy98;
762
526
      }
763
4.14k
    }
764
1.46k
yy92:
765
1.46k
    YYCURSOR = YYMARKER;
766
1.46k
    if (yyaccept <= 1) {
767
1.25k
      if (yyaccept == 0) {
768
1.05k
        goto yy79;
769
1.05k
      } else {
770
200
        goto yy81;
771
200
      }
772
1.25k
    } else {
773
204
      goto yy122;
774
204
    }
775
248
yy93:
776
248
    ++YYCURSOR;
777
248
    {
778
248
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
779
248
    PHP_JSON_CONDITION_GOTO(STR_P1);
780
1.46k
  }
781
733
yy95:
782
733
    yych = *++YYCURSOR;
783
733
    if (yych <= 0x7F) goto yy92;
784
665
    if (yych <= 0xBF) goto yy100;
785
17
    goto yy92;
786
1.04k
yy96:
787
1.04k
    yych = *++YYCURSOR;
788
1.04k
    if (yych <= 0x7F) goto yy92;
789
965
    if (yych <= 0xBF) goto yy102;
790
9
    goto yy92;
791
57.9k
yy97:
792
57.9k
    yych = *++YYCURSOR;
793
57.9k
    if (yych <= '9') {
794
56.4k
      if (yych <= '/') goto yy92;
795
56.4k
      if (yych <= '0') goto yy103;
796
3.89k
      if (yych <= '7') goto yy104;
797
1.42k
      goto yy105;
798
3.89k
    } else {
799
1.43k
      if (yych <= 'F') {
800
272
        if (yych <= '@') goto yy92;
801
267
        goto yy105;
802
1.16k
      } else {
803
1.16k
        if (yych <= '`') goto yy92;
804
1.14k
        if (yych <= 'f') goto yy105;
805
17
        goto yy92;
806
1.14k
      }
807
1.43k
    }
808
9.02k
yy98:
809
9.02k
    yych = *++YYCURSOR;
810
9.02k
    if (yych <= '@') {
811
1.54k
      if (yych <= '/') goto yy92;
812
1.46k
      if (yych <= '9') goto yy105;
813
7
      goto yy92;
814
7.48k
    } else {
815
7.48k
      if (yych <= 'F') goto yy105;
816
6.33k
      if (yych <= '`') goto yy92;
817
6.32k
      if (yych <= 'f') goto yy105;
818
13
      goto yy92;
819
6.32k
    }
820
4.56k
yy99:
821
4.56k
    yych = *++YYCURSOR;
822
4.56k
    if (yych <= 'B') {
823
2.63k
      if (yych <= '7') {
824
1.18k
        if (yych <= '/') goto yy92;
825
1.14k
        goto yy105;
826
1.45k
      } else {
827
1.45k
        if (yych <= '9') goto yy106;
828
902
        if (yych <= '@') goto yy92;
829
893
        goto yy106;
830
902
      }
831
2.63k
    } else {
832
1.93k
      if (yych <= '`') {
833
113
        if (yych <= 'F') goto yy107;
834
15
        goto yy92;
835
1.81k
      } else {
836
1.81k
        if (yych <= 'b') goto yy106;
837
59
        if (yych <= 'f') goto yy107;
838
21
        goto yy92;
839
59
      }
840
1.93k
    }
841
648
yy100:
842
648
    ++YYCURSOR;
843
648
    {
844
648
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
845
648
    PHP_JSON_CONDITION_GOTO(STR_P1);
846
4.56k
  }
847
956
yy102:
848
956
    yych = *++YYCURSOR;
849
956
    if (yych <= 0x7F) goto yy92;
850
941
    if (yych <= 0xBF) goto yy108;
851
15
    goto yy92;
852
52.5k
yy103:
853
52.5k
    yych = *++YYCURSOR;
854
52.5k
    if (yych <= '@') {
855
18.8k
      if (yych <= '/') goto yy92;
856
18.8k
      if (yych <= '7') goto yy110;
857
382
      if (yych <= '9') goto yy111;
858
9
      goto yy92;
859
33.6k
    } else {
860
33.6k
      if (yych <= 'F') goto yy111;
861
902
      if (yych <= '`') goto yy92;
862
891
      if (yych <= 'f') goto yy111;
863
17
      goto yy92;
864
891
    }
865
2.46k
yy104:
866
2.46k
    yych = *++YYCURSOR;
867
2.46k
    if (yych <= '@') {
868
817
      if (yych <= '/') goto yy92;
869
798
      if (yych <= '9') goto yy111;
870
7
      goto yy92;
871
1.65k
    } else {
872
1.65k
      if (yych <= 'F') goto yy111;
873
825
      if (yych <= '`') goto yy92;
874
816
      if (yych <= 'f') goto yy111;
875
19
      goto yy92;
876
816
    }
877
12.8k
yy105:
878
12.8k
    yych = *++YYCURSOR;
879
12.8k
    if (yych <= '@') {
880
10.0k
      if (yych <= '/') goto yy92;
881
9.97k
      if (yych <= '9') goto yy112;
882
9
      goto yy92;
883
9.97k
    } else {
884
2.80k
      if (yych <= 'F') goto yy112;
885
748
      if (yych <= '`') goto yy92;
886
739
      if (yych <= 'f') goto yy112;
887
13
      goto yy92;
888
739
    }
889
3.20k
yy106:
890
3.20k
    yych = *++YYCURSOR;
891
3.20k
    if (yych <= '@') {
892
771
      if (yych <= '/') goto yy92;
893
723
      if (yych <= '9') goto yy113;
894
7
      goto yy92;
895
2.43k
    } else {
896
2.43k
      if (yych <= 'F') goto yy113;
897
1.26k
      if (yych <= '`') goto yy92;
898
1.25k
      if (yych <= 'f') goto yy113;
899
19
      goto yy92;
900
1.25k
    }
901
136
yy107:
902
136
    yych = *++YYCURSOR;
903
136
    if (yych <= '@') {
904
73
      if (yych <= '/') goto yy92;
905
49
      if (yych <= '9') goto yy114;
906
9
      goto yy92;
907
63
    } else {
908
63
      if (yych <= 'F') goto yy114;
909
35
      if (yych <= '`') goto yy92;
910
30
      if (yych <= 'f') goto yy114;
911
15
      goto yy92;
912
30
    }
913
926
yy108:
914
926
    ++YYCURSOR;
915
926
    {
916
926
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
917
926
    PHP_JSON_CONDITION_GOTO(STR_P1);
918
136
  }
919
18.4k
yy110:
920
18.4k
    yych = *++YYCURSOR;
921
18.4k
    if (yych <= '@') {
922
3.37k
      if (yych <= '/') goto yy92;
923
3.36k
      if (yych <= '9') goto yy115;
924
7
      goto yy92;
925
15.1k
    } else {
926
15.1k
      if (yych <= 'F') goto yy115;
927
10.0k
      if (yych <= '`') goto yy92;
928
10.0k
      if (yych <= 'f') goto yy115;
929
15
      goto yy92;
930
10.0k
    }
931
36.4k
yy111:
932
36.4k
    yych = *++YYCURSOR;
933
36.4k
    if (yych <= '@') {
934
2.10k
      if (yych <= '/') goto yy92;
935
2.01k
      if (yych <= '9') goto yy117;
936
7
      goto yy92;
937
34.3k
    } else {
938
34.3k
      if (yych <= 'F') goto yy117;
939
929
      if (yych <= '`') goto yy92;
940
922
      if (yych <= 'f') goto yy117;
941
17
      goto yy92;
942
922
    }
943
12.7k
yy112:
944
12.7k
    yych = *++YYCURSOR;
945
12.7k
    if (yych <= '@') {
946
9.46k
      if (yych <= '/') goto yy92;
947
9.41k
      if (yych <= '9') goto yy119;
948
7
      goto yy92;
949
9.41k
    } else {
950
3.28k
      if (yych <= 'F') goto yy119;
951
758
      if (yych <= '`') goto yy92;
952
749
      if (yych <= 'f') goto yy119;
953
17
      goto yy92;
954
749
    }
955
3.12k
yy113:
956
3.12k
    yych = *++YYCURSOR;
957
3.12k
    if (yych <= '@') {
958
601
      if (yych <= '/') goto yy92;
959
553
      if (yych <= '9') goto yy121;
960
9
      goto yy92;
961
2.52k
    } else {
962
2.52k
      if (yych <= 'F') goto yy121;
963
823
      if (yych <= '`') goto yy92;
964
814
      if (yych <= 'f') goto yy121;
965
13
      goto yy92;
966
814
    }
967
83
yy114:
968
83
    yych = *++YYCURSOR;
969
83
    if (yych <= '@') {
970
51
      if (yych <= '/') goto yy92;
971
20
      if (yych <= '9') goto yy123;
972
7
      goto yy92;
973
32
    } else {
974
32
      if (yych <= 'F') goto yy123;
975
25
      if (yych <= '`') goto yy92;
976
14
      if (yych <= 'f') goto yy123;
977
11
      goto yy92;
978
14
    }
979
18.4k
yy115:
980
18.4k
    ++YYCURSOR;
981
18.4k
    {
982
18.4k
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
983
18.4k
    s->str_esc += 5;
984
18.4k
    PHP_JSON_CONDITION_GOTO(STR_P1);
985
83
  }
986
36.3k
yy117:
987
36.3k
    ++YYCURSOR;
988
36.3k
    {
989
36.3k
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
990
36.3k
    s->str_esc += 4;
991
36.3k
    PHP_JSON_CONDITION_GOTO(STR_P1);
992
83
  }
993
12.6k
yy119:
994
12.6k
    ++YYCURSOR;
995
12.6k
    {
996
12.6k
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
997
12.6k
    s->str_esc += 3;
998
12.6k
    PHP_JSON_CONDITION_GOTO(STR_P1);
999
83
  }
1000
3.04k
yy121:
1001
3.04k
    yyaccept = 2;
1002
3.04k
    yych = *(YYMARKER = ++YYCURSOR);
1003
3.04k
    if (yych == '\\') goto yy124;
1004
281
yy122:
1005
281
    {
1006
281
    s->errcode = PHP_JSON_ERROR_UTF16;
1007
281
    return PHP_JSON_T_ERROR;
1008
3.04k
  }
1009
23
yy123:
1010
23
    ++YYCURSOR;
1011
23
    goto yy122;
1012
2.98k
yy124:
1013
2.98k
    yych = *++YYCURSOR;
1014
2.98k
    if (yych != 'u') goto yy92;
1015
2.96k
    yych = *++YYCURSOR;
1016
2.96k
    if (yych == 'D') goto yy126;
1017
802
    if (yych != 'd') goto yy92;
1018
2.94k
yy126:
1019
2.94k
    yych = *++YYCURSOR;
1020
2.94k
    if (yych <= 'B') goto yy92;
1021
2.91k
    if (yych <= 'F') goto yy127;
1022
1.41k
    if (yych <= 'b') goto yy92;
1023
1.41k
    if (yych >= 'g') goto yy92;
1024
2.89k
yy127:
1025
2.89k
    yych = *++YYCURSOR;
1026
2.89k
    if (yych <= '@') {
1027
807
      if (yych <= '/') goto yy92;
1028
779
      if (yych >= ':') goto yy92;
1029
2.08k
    } else {
1030
2.08k
      if (yych <= 'F') goto yy128;
1031
1.07k
      if (yych <= '`') goto yy92;
1032
1.06k
      if (yych >= 'g') goto yy92;
1033
1.06k
    }
1034
2.84k
yy128:
1035
2.84k
    yych = *++YYCURSOR;
1036
2.84k
    if (yych <= '@') {
1037
804
      if (yych <= '/') goto yy92;
1038
760
      if (yych >= ':') goto yy92;
1039
2.04k
    } else {
1040
2.04k
      if (yych <= 'F') goto yy129;
1041
981
      if (yych <= '`') goto yy92;
1042
978
      if (yych >= 'g') goto yy92;
1043
978
    }
1044
2.78k
yy129:
1045
2.78k
    ++YYCURSOR;
1046
2.78k
    {
1047
2.78k
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
1048
2.78k
    s->str_esc += 8;
1049
2.78k
    PHP_JSON_CONDITION_GOTO(STR_P1);
1050
2.84k
  }
1051
/* *********************************** */
1052
0
yyc_STR_P2_BIN:
1053
0
    yych = *YYCURSOR;
1054
0
    if (yych <= 0xDF) {
1055
0
      if (yych <= '[') {
1056
0
        if (yych == '"') goto yy135;
1057
0
      } else {
1058
0
        if (yych <= '\\') goto yy137;
1059
0
        if (yych <= 0x7F) goto yy133;
1060
0
        if (yych <= 0xC1) goto yy139;
1061
0
        goto yy141;
1062
0
      }
1063
0
    } else {
1064
0
      if (yych <= 0xEF) {
1065
0
        if (yych <= 0xE0) goto yy142;
1066
0
        if (yych == 0xED) goto yy144;
1067
0
        goto yy143;
1068
0
      } else {
1069
0
        if (yych <= 0xF0) goto yy145;
1070
0
        if (yych <= 0xF3) goto yy146;
1071
0
        if (yych <= 0xF4) goto yy147;
1072
0
        goto yy139;
1073
0
      }
1074
0
    }
1075
0
yy133:
1076
0
    ++YYCURSOR;
1077
0
    { PHP_JSON_CONDITION_GOTO(STR_P2_BIN); }
1078
0
yy135:
1079
0
    ++YYCURSOR;
1080
0
    YYSETCONDITION(yycJS);
1081
0
    {
1082
0
    PHP_JSON_SCANNER_COPY_ESC();
1083
0
    return PHP_JSON_T_STRING;
1084
0
  }
1085
0
yy137:
1086
0
    yyaccept = 0;
1087
0
    yych = *(YYMARKER = ++YYCURSOR);
1088
0
    if (yych == 'u') goto yy148;
1089
0
yy138:
1090
0
    {
1091
0
    unsigned char esc;
1092
0
    PHP_JSON_SCANNER_COPY_ESC();
1093
0
    switch (*s->cursor) {
1094
0
      case 'b':
1095
0
        esc = '\b';
1096
0
        break;
1097
0
      case 'f':
1098
0
        esc = '\f';       break;
1099
0
      case 'n':
1100
0
        esc = '\n';
1101
0
        break;
1102
0
      case 'r':
1103
0
        esc = '\r';
1104
0
        break;
1105
0
      case 't':
1106
0
        esc = '\t';
1107
0
        break;
1108
0
      case '\\':
1109
0
      case '/':
1110
0
      case '"':
1111
0
        esc = *s->cursor;
1112
0
        break;
1113
0
      default:
1114
0
        s->errcode = PHP_JSON_ERROR_SYNTAX;
1115
0
        return PHP_JSON_T_ERROR;
1116
0
    }
1117
0
    *(s->pstr++) = esc;
1118
0
    ++YYCURSOR;
1119
0
    s->str_start = s->cursor;
1120
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1121
0
  }
1122
0
yy139:
1123
0
    ++YYCURSOR;
1124
0
yy140:
1125
0
    {
1126
0
    if (s->utf8_invalid) {
1127
0
      PHP_JSON_SCANNER_COPY_ESC();
1128
0
      if (s->options & PHP_JSON_INVALID_UTF8_SUBSTITUTE) {
1129
0
        *(s->pstr++) = (unsigned char) (0xe0 | (0xfffd >> 12));
1130
0
        *(s->pstr++) = (unsigned char) (0x80 | ((0xfffd >> 6) & 0x3f));
1131
0
        *(s->pstr++) = (unsigned char) (0x80 | (0xfffd & 0x3f));
1132
0
      }
1133
0
      s->str_start = s->cursor;
1134
0
    }
1135
0
    PHP_JSON_CONDITION_GOTO(STR_P2_BIN);
1136
0
  }
1137
0
yy141:
1138
0
    yych = *++YYCURSOR;
1139
0
    if (yych <= 0x7F) goto yy140;
1140
0
    if (yych <= 0xBF) goto yy133;
1141
0
    goto yy140;
1142
0
yy142:
1143
0
    yyaccept = 1;
1144
0
    yych = *(YYMARKER = ++YYCURSOR);
1145
0
    if (yych <= 0x9F) goto yy140;
1146
0
    if (yych <= 0xBF) goto yy150;
1147
0
    goto yy140;
1148
0
yy143:
1149
0
    yyaccept = 1;
1150
0
    yych = *(YYMARKER = ++YYCURSOR);
1151
0
    if (yych <= 0x7F) goto yy140;
1152
0
    if (yych <= 0xBF) goto yy150;
1153
0
    goto yy140;
1154
0
yy144:
1155
0
    yyaccept = 1;
1156
0
    yych = *(YYMARKER = ++YYCURSOR);
1157
0
    if (yych <= 0x7F) goto yy140;
1158
0
    if (yych <= 0x9F) goto yy150;
1159
0
    goto yy140;
1160
0
yy145:
1161
0
    yyaccept = 1;
1162
0
    yych = *(YYMARKER = ++YYCURSOR);
1163
0
    if (yych <= 0x8F) goto yy140;
1164
0
    if (yych <= 0xBF) goto yy151;
1165
0
    goto yy140;
1166
0
yy146:
1167
0
    yyaccept = 1;
1168
0
    yych = *(YYMARKER = ++YYCURSOR);
1169
0
    if (yych <= 0x7F) goto yy140;
1170
0
    if (yych <= 0xBF) goto yy151;
1171
0
    goto yy140;
1172
0
yy147:
1173
0
    yyaccept = 1;
1174
0
    yych = *(YYMARKER = ++YYCURSOR);
1175
0
    if (yych <= 0x7F) goto yy140;
1176
0
    if (yych <= 0x8F) goto yy151;
1177
0
    goto yy140;
1178
0
yy148:
1179
0
    yych = *++YYCURSOR;
1180
0
    if (yych <= 'D') {
1181
0
      if (yych <= '9') {
1182
0
        if (yych <= '/') goto yy149;
1183
0
        if (yych <= '0') goto yy152;
1184
0
        goto yy153;
1185
0
      } else {
1186
0
        if (yych <= '@') goto yy149;
1187
0
        if (yych <= 'C') goto yy153;
1188
0
        goto yy154;
1189
0
      }
1190
0
    } else {
1191
0
      if (yych <= 'c') {
1192
0
        if (yych <= 'F') goto yy153;
1193
0
        if (yych >= 'a') goto yy153;
1194
0
      } else {
1195
0
        if (yych <= 'd') goto yy154;
1196
0
        if (yych <= 'f') goto yy153;
1197
0
      }
1198
0
    }
1199
0
yy149:
1200
0
    YYCURSOR = YYMARKER;
1201
0
    if (yyaccept == 0) {
1202
0
      goto yy138;
1203
0
    } else {
1204
0
      goto yy140;
1205
0
    }
1206
0
yy150:
1207
0
    yych = *++YYCURSOR;
1208
0
    if (yych <= 0x7F) goto yy149;
1209
0
    if (yych <= 0xBF) goto yy133;
1210
0
    goto yy149;
1211
0
yy151:
1212
0
    yych = *++YYCURSOR;
1213
0
    if (yych <= 0x7F) goto yy149;
1214
0
    if (yych <= 0xBF) goto yy150;
1215
0
    goto yy149;
1216
0
yy152:
1217
0
    yych = *++YYCURSOR;
1218
0
    if (yych <= '9') {
1219
0
      if (yych <= '/') goto yy149;
1220
0
      if (yych <= '0') goto yy155;
1221
0
      if (yych <= '7') goto yy156;
1222
0
      goto yy157;
1223
0
    } else {
1224
0
      if (yych <= 'F') {
1225
0
        if (yych <= '@') goto yy149;
1226
0
        goto yy157;
1227
0
      } else {
1228
0
        if (yych <= '`') goto yy149;
1229
0
        if (yych <= 'f') goto yy157;
1230
0
        goto yy149;
1231
0
      }
1232
0
    }
1233
0
yy153:
1234
0
    yych = *++YYCURSOR;
1235
0
    if (yych <= '@') {
1236
0
      if (yych <= '/') goto yy149;
1237
0
      if (yych <= '9') goto yy157;
1238
0
      goto yy149;
1239
0
    } else {
1240
0
      if (yych <= 'F') goto yy157;
1241
0
      if (yych <= '`') goto yy149;
1242
0
      if (yych <= 'f') goto yy157;
1243
0
      goto yy149;
1244
0
    }
1245
0
yy154:
1246
0
    yych = *++YYCURSOR;
1247
0
    if (yych <= '@') {
1248
0
      if (yych <= '/') goto yy149;
1249
0
      if (yych <= '7') goto yy157;
1250
0
      if (yych <= '9') goto yy158;
1251
0
      goto yy149;
1252
0
    } else {
1253
0
      if (yych <= 'B') goto yy158;
1254
0
      if (yych <= '`') goto yy149;
1255
0
      if (yych <= 'b') goto yy158;
1256
0
      goto yy149;
1257
0
    }
1258
0
yy155:
1259
0
    yych = *++YYCURSOR;
1260
0
    if (yych <= '@') {
1261
0
      if (yych <= '/') goto yy149;
1262
0
      if (yych <= '7') goto yy159;
1263
0
      if (yych <= '9') goto yy160;
1264
0
      goto yy149;
1265
0
    } else {
1266
0
      if (yych <= 'F') goto yy160;
1267
0
      if (yych <= '`') goto yy149;
1268
0
      if (yych <= 'f') goto yy160;
1269
0
      goto yy149;
1270
0
    }
1271
0
yy156:
1272
0
    yych = *++YYCURSOR;
1273
0
    if (yych <= '@') {
1274
0
      if (yych <= '/') goto yy149;
1275
0
      if (yych <= '9') goto yy160;
1276
0
      goto yy149;
1277
0
    } else {
1278
0
      if (yych <= 'F') goto yy160;
1279
0
      if (yych <= '`') goto yy149;
1280
0
      if (yych <= 'f') goto yy160;
1281
0
      goto yy149;
1282
0
    }
1283
0
yy157:
1284
0
    yych = *++YYCURSOR;
1285
0
    if (yych <= '@') {
1286
0
      if (yych <= '/') goto yy149;
1287
0
      if (yych <= '9') goto yy161;
1288
0
      goto yy149;
1289
0
    } else {
1290
0
      if (yych <= 'F') goto yy161;
1291
0
      if (yych <= '`') goto yy149;
1292
0
      if (yych <= 'f') goto yy161;
1293
0
      goto yy149;
1294
0
    }
1295
0
yy158:
1296
0
    yych = *++YYCURSOR;
1297
0
    if (yych <= '@') {
1298
0
      if (yych <= '/') goto yy149;
1299
0
      if (yych <= '9') goto yy162;
1300
0
      goto yy149;
1301
0
    } else {
1302
0
      if (yych <= 'F') goto yy162;
1303
0
      if (yych <= '`') goto yy149;
1304
0
      if (yych <= 'f') goto yy162;
1305
0
      goto yy149;
1306
0
    }
1307
0
yy159:
1308
0
    yych = *++YYCURSOR;
1309
0
    if (yych <= '@') {
1310
0
      if (yych <= '/') goto yy149;
1311
0
      if (yych <= '9') goto yy163;
1312
0
      goto yy149;
1313
0
    } else {
1314
0
      if (yych <= 'F') goto yy163;
1315
0
      if (yych <= '`') goto yy149;
1316
0
      if (yych <= 'f') goto yy163;
1317
0
      goto yy149;
1318
0
    }
1319
0
yy160:
1320
0
    yych = *++YYCURSOR;
1321
0
    if (yych <= '@') {
1322
0
      if (yych <= '/') goto yy149;
1323
0
      if (yych <= '9') goto yy165;
1324
0
      goto yy149;
1325
0
    } else {
1326
0
      if (yych <= 'F') goto yy165;
1327
0
      if (yych <= '`') goto yy149;
1328
0
      if (yych <= 'f') goto yy165;
1329
0
      goto yy149;
1330
0
    }
1331
0
yy161:
1332
0
    yych = *++YYCURSOR;
1333
0
    if (yych <= '@') {
1334
0
      if (yych <= '/') goto yy149;
1335
0
      if (yych <= '9') goto yy167;
1336
0
      goto yy149;
1337
0
    } else {
1338
0
      if (yych <= 'F') goto yy167;
1339
0
      if (yych <= '`') goto yy149;
1340
0
      if (yych <= 'f') goto yy167;
1341
0
      goto yy149;
1342
0
    }
1343
0
yy162:
1344
0
    yych = *++YYCURSOR;
1345
0
    if (yych <= '@') {
1346
0
      if (yych <= '/') goto yy149;
1347
0
      if (yych <= '9') goto yy169;
1348
0
      goto yy149;
1349
0
    } else {
1350
0
      if (yych <= 'F') goto yy169;
1351
0
      if (yych <= '`') goto yy149;
1352
0
      if (yych <= 'f') goto yy169;
1353
0
      goto yy149;
1354
0
    }
1355
0
yy163:
1356
0
    ++YYCURSOR;
1357
0
    {
1358
0
    int utf16 = php_json_ucs2_to_int(s, 2);
1359
0
    PHP_JSON_SCANNER_COPY_UTF();
1360
0
    *(s->pstr++) = (unsigned char) utf16;
1361
0
    s->str_start = s->cursor;
1362
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1363
0
  }
1364
0
yy165:
1365
0
    ++YYCURSOR;
1366
0
    {
1367
0
    int utf16 = php_json_ucs2_to_int(s, 3);
1368
0
    PHP_JSON_SCANNER_COPY_UTF();
1369
0
    *(s->pstr++) = (unsigned char) (0xc0 | (utf16 >> 6));
1370
0
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1371
0
    s->str_start = s->cursor;
1372
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1373
0
  }
1374
0
yy167:
1375
0
    ++YYCURSOR;
1376
0
    {
1377
0
    int utf16 = php_json_ucs2_to_int(s, 4);
1378
0
    PHP_JSON_SCANNER_COPY_UTF();
1379
0
    *(s->pstr++) = (unsigned char) (0xe0 | (utf16 >> 12));
1380
0
    *(s->pstr++) = (unsigned char) (0x80 | ((utf16 >> 6) & 0x3f));
1381
0
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1382
0
    s->str_start = s->cursor;
1383
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1384
0
  }
1385
0
yy169:
1386
0
    yych = *++YYCURSOR;
1387
0
    if (yych != '\\') goto yy149;
1388
0
    yych = *++YYCURSOR;
1389
0
    if (yych != 'u') goto yy149;
1390
0
    yych = *++YYCURSOR;
1391
0
    if (yych == 'D') goto yy172;
1392
0
    if (yych != 'd') goto yy149;
1393
0
yy172:
1394
0
    yych = *++YYCURSOR;
1395
0
    if (yych <= 'B') goto yy149;
1396
0
    if (yych <= 'F') goto yy173;
1397
0
    if (yych <= 'b') goto yy149;
1398
0
    if (yych >= 'g') goto yy149;
1399
0
yy173:
1400
0
    yych = *++YYCURSOR;
1401
0
    if (yych <= '@') {
1402
0
      if (yych <= '/') goto yy149;
1403
0
      if (yych >= ':') goto yy149;
1404
0
    } else {
1405
0
      if (yych <= 'F') goto yy174;
1406
0
      if (yych <= '`') goto yy149;
1407
0
      if (yych >= 'g') goto yy149;
1408
0
    }
1409
0
yy174:
1410
0
    yych = *++YYCURSOR;
1411
0
    if (yych <= '@') {
1412
0
      if (yych <= '/') goto yy149;
1413
0
      if (yych >= ':') goto yy149;
1414
0
    } else {
1415
0
      if (yych <= 'F') goto yy175;
1416
0
      if (yych <= '`') goto yy149;
1417
0
      if (yych >= 'g') goto yy149;
1418
0
    }
1419
0
yy175:
1420
0
    ++YYCURSOR;
1421
0
    {
1422
0
    int utf32, utf16_hi, utf16_lo;
1423
0
    utf16_hi = php_json_ucs2_to_int(s, 4);
1424
0
    utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
1425
0
    utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
1426
0
    PHP_JSON_SCANNER_COPY_UTF_SP();
1427
0
    *(s->pstr++) = (unsigned char) (0xf0 | (utf32 >> 18));
1428
0
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 12) & 0x3f));
1429
0
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 6) & 0x3f));
1430
0
    *(s->pstr++) = (unsigned char) (0x80 | (utf32 & 0x3f));
1431
0
    s->str_start = s->cursor;
1432
0
    PHP_JSON_CONDITION_GOTO_STR_P2();
1433
0
  }
1434
/* *********************************** */
1435
12.1M
yyc_STR_P2_UTF:
1436
12.1M
    yych = *YYCURSOR;
1437
12.1M
    if (yych == '"') goto yy181;
1438
12.1M
    if (yych == '\\') goto yy183;
1439
12.0M
    ++YYCURSOR;
1440
12.0M
    { PHP_JSON_CONDITION_GOTO(STR_P2_UTF); }
1441
3.27k
yy181:
1442
3.27k
    ++YYCURSOR;
1443
3.27k
    YYSETCONDITION(yycJS);
1444
3.27k
    {
1445
3.27k
    PHP_JSON_SCANNER_COPY_ESC();
1446
3.27k
    return PHP_JSON_T_STRING;
1447
12.1M
  }
1448
76.2k
yy183:
1449
76.2k
    yych = *(YYMARKER = ++YYCURSOR);
1450
76.2k
    if (yych == 'u') goto yy185;
1451
9.99k
yy184:
1452
9.99k
    {
1453
9.99k
    unsigned char esc;
1454
9.99k
    PHP_JSON_SCANNER_COPY_ESC();
1455
9.99k
    switch (*s->cursor) {
1456
294
      case 'b':
1457
294
        esc = '\b';
1458
294
        break;
1459
523
      case 'f':
1460
523
        esc = '\f';       break;
1461
394
      case 'n':
1462
394
        esc = '\n';
1463
394
        break;
1464
339
      case 'r':
1465
339
        esc = '\r';
1466
339
        break;
1467
269
      case 't':
1468
269
        esc = '\t';
1469
269
        break;
1470
1.01k
      case '\\':
1471
1.44k
      case '/':
1472
8.17k
      case '"':
1473
8.17k
        esc = *s->cursor;
1474
8.17k
        break;
1475
0
      default:
1476
0
        s->errcode = PHP_JSON_ERROR_SYNTAX;
1477
0
        return PHP_JSON_T_ERROR;
1478
9.99k
    }
1479
9.99k
    *(s->pstr++) = esc;
1480
9.99k
    ++YYCURSOR;
1481
9.99k
    s->str_start = s->cursor;
1482
9.99k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1483
9.99k
  }
1484
66.2k
yy185:
1485
66.2k
    yych = *++YYCURSOR;
1486
66.2k
    if (yych <= 'D') {
1487
64.5k
      if (yych <= '9') {
1488
62.9k
        if (yych <= '/') goto yy186;
1489
62.9k
        if (yych <= '0') goto yy187;
1490
6.69k
        goto yy188;
1491
62.9k
      } else {
1492
1.56k
        if (yych <= '@') goto yy186;
1493
1.56k
        if (yych <= 'C') goto yy188;
1494
1.35k
        goto yy189;
1495
1.56k
      }
1496
64.5k
    } else {
1497
1.73k
      if (yych <= 'c') {
1498
438
        if (yych <= 'F') goto yy188;
1499
222
        if (yych >= 'a') goto yy188;
1500
1.29k
      } else {
1501
1.29k
        if (yych <= 'd') goto yy189;
1502
252
        if (yych <= 'f') goto yy188;
1503
252
      }
1504
1.73k
    }
1505
0
yy186:
1506
0
    YYCURSOR = YYMARKER;
1507
0
    goto yy184;
1508
56.2k
yy187:
1509
56.2k
    yych = *++YYCURSOR;
1510
56.2k
    if (yych <= '9') {
1511
54.9k
      if (yych <= '/') goto yy186;
1512
54.9k
      if (yych <= '0') goto yy190;
1513
3.14k
      if (yych <= '7') goto yy191;
1514
1.19k
      goto yy192;
1515
3.14k
    } else {
1516
1.27k
      if (yych <= 'F') {
1517
216
        if (yych <= '@') goto yy186;
1518
216
        goto yy192;
1519
1.06k
      } else {
1520
1.06k
        if (yych <= '`') goto yy186;
1521
1.06k
        if (yych <= 'f') goto yy192;
1522
0
        goto yy186;
1523
1.06k
      }
1524
1.27k
    }
1525
7.59k
yy188:
1526
7.59k
    yych = *++YYCURSOR;
1527
7.59k
    if (yych <= '@') {
1528
1.21k
      if (yych <= '/') goto yy186;
1529
1.21k
      if (yych <= '9') goto yy192;
1530
0
      goto yy186;
1531
6.38k
    } else {
1532
6.38k
      if (yych <= 'F') goto yy192;
1533
6.00k
      if (yych <= '`') goto yy186;
1534
6.00k
      if (yych <= 'f') goto yy192;
1535
0
      goto yy186;
1536
6.00k
    }
1537
2.39k
yy189:
1538
2.39k
    yych = *++YYCURSOR;
1539
2.39k
    if (yych <= '@') {
1540
1.12k
      if (yych <= '/') goto yy186;
1541
1.12k
      if (yych <= '7') goto yy192;
1542
312
      if (yych <= '9') goto yy193;
1543
0
      goto yy186;
1544
1.27k
    } else {
1545
1.27k
      if (yych <= 'B') goto yy193;
1546
692
      if (yych <= '`') goto yy186;
1547
692
      if (yych <= 'b') goto yy193;
1548
0
      goto yy186;
1549
692
    }
1550
51.8k
yy190:
1551
51.8k
    yych = *++YYCURSOR;
1552
51.8k
    if (yych <= '@') {
1553
18.3k
      if (yych <= '/') goto yy186;
1554
18.3k
      if (yych <= '7') goto yy194;
1555
238
      if (yych <= '9') goto yy195;
1556
0
      goto yy186;
1557
33.4k
    } else {
1558
33.4k
      if (yych <= 'F') goto yy195;
1559
783
      if (yych <= '`') goto yy186;
1560
783
      if (yych <= 'f') goto yy195;
1561
0
      goto yy186;
1562
783
    }
1563
1.94k
yy191:
1564
1.94k
    yych = *++YYCURSOR;
1565
1.94k
    if (yych <= '@') {
1566
660
      if (yych <= '/') goto yy186;
1567
660
      if (yych <= '9') goto yy195;
1568
0
      goto yy186;
1569
1.28k
    } else {
1570
1.28k
      if (yych <= 'F') goto yy195;
1571
589
      if (yych <= '`') goto yy186;
1572
589
      if (yych <= 'f') goto yy195;
1573
0
      goto yy186;
1574
589
    }
1575
10.8k
yy192:
1576
10.8k
    yych = *++YYCURSOR;
1577
10.8k
    if (yych <= '@') {
1578
9.12k
      if (yych <= '/') goto yy186;
1579
9.12k
      if (yych <= '9') goto yy196;
1580
0
      goto yy186;
1581
9.12k
    } else {
1582
1.76k
      if (yych <= 'F') goto yy196;
1583
417
      if (yych <= '`') goto yy186;
1584
417
      if (yych <= 'f') goto yy196;
1585
0
      goto yy186;
1586
417
    }
1587
1.58k
yy193:
1588
1.58k
    yych = *++YYCURSOR;
1589
1.58k
    if (yych <= '@') {
1590
473
      if (yych <= '/') goto yy186;
1591
473
      if (yych <= '9') goto yy197;
1592
0
      goto yy186;
1593
1.11k
    } else {
1594
1.11k
      if (yych <= 'F') goto yy197;
1595
561
      if (yych <= '`') goto yy186;
1596
561
      if (yych <= 'f') goto yy197;
1597
0
      goto yy186;
1598
561
    }
1599
18.1k
yy194:
1600
18.1k
    yych = *++YYCURSOR;
1601
18.1k
    if (yych <= '@') {
1602
3.28k
      if (yych <= '/') goto yy186;
1603
3.28k
      if (yych <= '9') goto yy198;
1604
0
      goto yy186;
1605
14.8k
    } else {
1606
14.8k
      if (yych <= 'F') goto yy198;
1607
9.84k
      if (yych <= '`') goto yy186;
1608
9.84k
      if (yych <= 'f') goto yy198;
1609
0
      goto yy186;
1610
9.84k
    }
1611
35.6k
yy195:
1612
35.6k
    yych = *++YYCURSOR;
1613
35.6k
    if (yych <= '@') {
1614
1.78k
      if (yych <= '/') goto yy186;
1615
1.78k
      if (yych <= '9') goto yy200;
1616
0
      goto yy186;
1617
33.8k
    } else {
1618
33.8k
      if (yych <= 'F') goto yy200;
1619
601
      if (yych <= '`') goto yy186;
1620
601
      if (yych <= 'f') goto yy200;
1621
0
      goto yy186;
1622
601
    }
1623
10.8k
yy196:
1624
10.8k
    yych = *++YYCURSOR;
1625
10.8k
    if (yych <= '@') {
1626
8.87k
      if (yych <= '/') goto yy186;
1627
8.87k
      if (yych <= '9') goto yy202;
1628
0
      goto yy186;
1629
8.87k
    } else {
1630
2.01k
      if (yych <= 'F') goto yy202;
1631
440
      if (yych <= '`') goto yy186;
1632
440
      if (yych <= 'f') goto yy202;
1633
0
      goto yy186;
1634
440
    }
1635
1.58k
yy197:
1636
1.58k
    yych = *++YYCURSOR;
1637
1.58k
    if (yych <= '@') {
1638
341
      if (yych <= '/') goto yy186;
1639
341
      if (yych <= '9') goto yy204;
1640
0
      goto yy186;
1641
1.24k
    } else {
1642
1.24k
      if (yych <= 'F') goto yy204;
1643
319
      if (yych <= '`') goto yy186;
1644
319
      if (yych <= 'f') goto yy204;
1645
0
      goto yy186;
1646
319
    }
1647
18.1k
yy198:
1648
18.1k
    ++YYCURSOR;
1649
18.1k
    {
1650
18.1k
    int utf16 = php_json_ucs2_to_int(s, 2);
1651
18.1k
    PHP_JSON_SCANNER_COPY_UTF();
1652
18.1k
    *(s->pstr++) = (unsigned char) utf16;
1653
18.1k
    s->str_start = s->cursor;
1654
18.1k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1655
18.1k
  }
1656
35.6k
yy200:
1657
35.6k
    ++YYCURSOR;
1658
35.6k
    {
1659
35.6k
    int utf16 = php_json_ucs2_to_int(s, 3);
1660
35.6k
    PHP_JSON_SCANNER_COPY_UTF();
1661
35.6k
    *(s->pstr++) = (unsigned char) (0xc0 | (utf16 >> 6));
1662
35.6k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1663
35.6k
    s->str_start = s->cursor;
1664
35.6k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1665
35.6k
  }
1666
10.8k
yy202:
1667
10.8k
    ++YYCURSOR;
1668
10.8k
    {
1669
10.8k
    int utf16 = php_json_ucs2_to_int(s, 4);
1670
10.8k
    PHP_JSON_SCANNER_COPY_UTF();
1671
10.8k
    *(s->pstr++) = (unsigned char) (0xe0 | (utf16 >> 12));
1672
10.8k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf16 >> 6) & 0x3f));
1673
10.8k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1674
10.8k
    s->str_start = s->cursor;
1675
10.8k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1676
10.8k
  }
1677
1.58k
yy204:
1678
1.58k
    yych = *++YYCURSOR;
1679
1.58k
    if (yych != '\\') goto yy186;
1680
1.58k
    yych = *++YYCURSOR;
1681
1.58k
    if (yych != 'u') goto yy186;
1682
1.58k
    yych = *++YYCURSOR;
1683
1.58k
    if (yych == 'D') goto yy207;
1684
310
    if (yych != 'd') goto yy186;
1685
1.58k
yy207:
1686
1.58k
    yych = *++YYCURSOR;
1687
1.58k
    if (yych <= 'B') goto yy186;
1688
1.58k
    if (yych <= 'F') goto yy208;
1689
739
    if (yych <= 'b') goto yy186;
1690
739
    if (yych >= 'g') goto yy186;
1691
1.58k
yy208:
1692
1.58k
    yych = *++YYCURSOR;
1693
1.58k
    if (yych <= '@') {
1694
561
      if (yych <= '/') goto yy186;
1695
561
      if (yych >= ':') goto yy186;
1696
1.02k
    } else {
1697
1.02k
      if (yych <= 'F') goto yy209;
1698
536
      if (yych <= '`') goto yy186;
1699
536
      if (yych >= 'g') goto yy186;
1700
536
    }
1701
1.58k
yy209:
1702
1.58k
    yych = *++YYCURSOR;
1703
1.58k
    if (yych <= '@') {
1704
537
      if (yych <= '/') goto yy186;
1705
537
      if (yych >= ':') goto yy186;
1706
1.04k
    } else {
1707
1.04k
      if (yych <= 'F') goto yy210;
1708
497
      if (yych <= '`') goto yy186;
1709
497
      if (yych >= 'g') goto yy186;
1710
497
    }
1711
1.58k
yy210:
1712
1.58k
    ++YYCURSOR;
1713
1.58k
    {
1714
1.58k
    int utf32, utf16_hi, utf16_lo;
1715
1.58k
    utf16_hi = php_json_ucs2_to_int(s, 4);
1716
1.58k
    utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
1717
1.58k
    utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
1718
1.58k
    PHP_JSON_SCANNER_COPY_UTF_SP();
1719
1.58k
    *(s->pstr++) = (unsigned char) (0xf0 | (utf32 >> 18));
1720
1.58k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 12) & 0x3f));
1721
1.58k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 6) & 0x3f));
1722
1.58k
    *(s->pstr++) = (unsigned char) (0x80 | (utf32 & 0x3f));
1723
1.58k
    s->str_start = s->cursor;
1724
1.58k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1725
1.58k
  }
1726
1.58k
  }
1727
1728
1729
1.58k
}