Coverage Report

Created: 2026-06-02 06:36

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