Coverage Report

Created: 2026-02-14 06:52

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
11.8M
#define YYCTYPE     php_json_ctype
25
173M
#define YYCURSOR    s->cursor
26
#define YYLIMIT     s->limit
27
82.1M
#define YYMARKER    s->marker
28
#define YYCTXMARKER s->ctxmarker
29
30
23.7M
#define YYGETCONDITION()        s->state
31
126k
#define YYSETCONDITION(yystate) s->state = yystate
32
33
#define YYFILL(n)
34
35
122k
#define PHP_JSON_CONDITION_SET(condition) YYSETCONDITION(yyc##condition)
36
33.2M
#define PHP_JSON_CONDITION_GOTO(condition) goto yyc_##condition
37
#define PHP_JSON_CONDITION_SET_AND_GOTO(condition) \
38
58.1k
  PHP_JSON_CONDITION_SET(condition); \
39
58.1k
  PHP_JSON_CONDITION_GOTO(condition)
40
#define PHP_JSON_CONDITION_GOTO_STR_P2() \
41
17.9k
  do { \
42
17.9k
    if (s->utf8_invalid) { \
43
0
      PHP_JSON_CONDITION_GOTO(STR_P2_BIN); \
44
17.9k
    } else { \
45
17.9k
      PHP_JSON_CONDITION_GOTO(STR_P2_UTF); \
46
17.9k
    } \
47
17.9k
  } while(0)
48
49
50
6.86k
#define PHP_JSON_SCANNER_COPY_ESC() php_json_scanner_copy_string(s, 0)
51
9.44k
#define PHP_JSON_SCANNER_COPY_UTF() php_json_scanner_copy_string(s, 5)
52
1.61k
#define PHP_JSON_SCANNER_COPY_UTF_SP() php_json_scanner_copy_string(s, 11)
53
54
1.88M
#define PHP_JSON_INT_MAX_LENGTH (MAX_LENGTH_OF_LONG - 1)
55
56
1.90M
#define PHP_JSON_TOKEN_LENGTH() ((size_t) (s->cursor - s->token))
57
56.3M
#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
17.9k
{
61
17.9k
  size_t len = (size_t)(s->cursor - s->str_start - esc_size - 1);
62
17.9k
  if (len) {
63
4.30k
    memcpy(s->pstr, s->str_start, len);
64
4.30k
    s->pstr += len;
65
4.30k
  }
66
17.9k
}
67
68
static int php_json_hex_to_int(unsigned char code)
69
39.9k
{
70
39.9k
  if (code >= '0' && code <= '9') {
71
20.3k
    return code - '0';
72
20.3k
  } else if (code >= 'A' && code <= 'F') {
73
10.1k
    return code - ('A' - 10);
74
10.1k
  } else if (code >= 'a' && code <= 'f') {
75
9.43k
    return code - ('a' - 10);
76
9.43k
  } else {
77
    /* this should never happened (just to suppress compiler warning) */
78
0
    return -1;
79
0
  }
80
39.9k
}
81
82
static int php_json_ucs2_to_int_ex(php_json_scanner *s, int size, int start)
83
12.6k
{
84
12.6k
  int i, code = 0;
85
12.6k
  php_json_ctype *pc = s->cursor - start;
86
52.6k
  for (i = 0; i < size; i++) {
87
39.9k
    code |= php_json_hex_to_int(*(pc--)) << (i * 4);
88
39.9k
  }
89
12.6k
  return code;
90
12.6k
}
91
92
static int php_json_ucs2_to_int(php_json_scanner *s, int size)
93
11.0k
{
94
11.0k
  return php_json_ucs2_to_int_ex(s, size, 1);
95
11.0k
}
96
97
void php_json_scanner_init(php_json_scanner *s, const char *str, size_t str_len, int options)
98
12.2k
{
99
12.2k
  s->cursor = (php_json_ctype *) str;
100
12.2k
  s->limit = (php_json_ctype *) str + str_len;
101
12.2k
  s->options = options;
102
12.2k
  PHP_JSON_TOKEN_LOCATION(first_column) = 1;
103
12.2k
  PHP_JSON_TOKEN_LOCATION(first_line) = 1;
104
12.2k
  PHP_JSON_TOKEN_LOCATION(last_column) = 1;
105
12.2k
  PHP_JSON_TOKEN_LOCATION(last_line) = 1;
106
12.2k
  PHP_JSON_CONDITION_SET(JS);
107
12.2k
}
108
109
int php_json_scan(php_json_scanner *s)
110
11.8M
{
111
11.8M
  ZVAL_NULL(&s->value);
112
113
11.8M
std:
114
11.8M
  PHP_JSON_TOKEN_LOCATION(first_column) = s->errloc.last_column;
115
11.8M
  PHP_JSON_TOKEN_LOCATION(first_line) = s->errloc.last_line;
116
11.8M
  s->token = s->cursor;
117
118
119
11.8M
  {
120
11.8M
    YYCTYPE yych;
121
11.8M
    unsigned int yyaccept = 0;
122
11.8M
    if (YYGETCONDITION() < 2) {
123
11.8M
      if (YYGETCONDITION() < 1) {
124
11.8M
        goto yyc_JS;
125
11.8M
      } else {
126
0
        goto yyc_STR_P1;
127
0
      }
128
11.8M
    } 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
11.8M
yyc_JS:
137
11.8M
    {
138
11.8M
      static const unsigned char yybm[] = {
139
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
140
11.8M
          0,  64,   0,   0,   0,  64,   0,   0, 
141
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
142
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
143
11.8M
         64,   0,   0,   0,   0,   0,   0,   0, 
144
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
145
11.8M
        128, 128, 128, 128, 128, 128, 128, 128, 
146
11.8M
        128, 128,   0,   0,   0,   0,   0,   0, 
147
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
148
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
149
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
150
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
151
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
152
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
153
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
154
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
155
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
156
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
157
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
158
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
159
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
160
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
161
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
162
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
163
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
164
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
165
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
166
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
167
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
168
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
169
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
170
11.8M
          0,   0,   0,   0,   0,   0,   0,   0, 
171
11.8M
      };
172
11.8M
      yych = *YYCURSOR;
173
11.8M
      if (yych <= ']') {
174
6.57M
        if (yych <= '"') {
175
66.7k
          if (yych <= '\f') {
176
7.86k
            if (yych <= 0x08) {
177
7.03k
              if (yych >= 0x01) goto yy5;
178
7.03k
            } else {
179
828
              if (yych <= '\t') goto yy7;
180
583
              if (yych <= '\n') goto yy10;
181
5
              goto yy5;
182
583
            }
183
58.8k
          } else {
184
58.8k
            if (yych <= 0x1F) {
185
474
              if (yych <= '\r') goto yy12;
186
41
              goto yy5;
187
58.4k
            } else {
188
58.4k
              if (yych <= ' ') goto yy7;
189
58.1k
              if (yych <= '!') goto yy13;
190
58.1k
              goto yy15;
191
58.1k
            }
192
58.8k
          }
193
6.50M
        } else {
194
6.50M
          if (yych <= '0') {
195
5.97M
            if (yych <= ',') {
196
4.53M
              if (yych <= '+') goto yy13;
197
4.53M
              goto yy17;
198
4.53M
            } else {
199
1.44M
              if (yych <= '-') goto yy19;
200
1.43M
              if (yych <= '/') goto yy13;
201
1.43M
              goto yy20;
202
1.43M
            }
203
5.97M
          } else {
204
525k
            if (yych <= 'Z') {
205
512k
              if (yych <= '9') goto yy22;
206
52.5k
              if (yych <= ':') goto yy24;
207
109
              goto yy13;
208
52.5k
            } else {
209
12.9k
              if (yych <= '[') goto yy26;
210
5.45k
              if (yych <= '\\') goto yy13;
211
5.42k
              goto yy28;
212
5.45k
            }
213
525k
          }
214
6.50M
        }
215
6.57M
      } else {
216
5.31M
        if (yych <= '}') {
217
5.31M
          if (yych <= 's') {
218
714
            if (yych <= 'f') {
219
430
              if (yych <= 'e') goto yy13;
220
265
              goto yy30;
221
430
            } else {
222
284
              if (yych == 'n') goto yy31;
223
25
              goto yy13;
224
284
            }
225
5.31M
          } else {
226
5.31M
            if (yych <= 'z') {
227
270
              if (yych <= 't') goto yy32;
228
22
              goto yy13;
229
5.31M
            } else {
230
5.31M
              if (yych <= '{') goto yy33;
231
2.65M
              if (yych <= '|') goto yy13;
232
2.65M
              goto yy35;
233
2.65M
            }
234
5.31M
          }
235
5.31M
        } else {
236
512
          if (yych <= 0xEC) {
237
253
            if (yych <= 0xC1) {
238
78
              if (yych <= 0x7F) goto yy13;
239
72
              goto yy37;
240
175
            } else {
241
175
              if (yych <= 0xDF) goto yy39;
242
87
              if (yych <= 0xE0) goto yy40;
243
52
              goto yy41;
244
87
            }
245
259
          } else {
246
259
            if (yych <= 0xF0) {
247
116
              if (yych <= 0xED) goto yy42;
248
73
              if (yych <= 0xEF) goto yy41;
249
56
              goto yy43;
250
143
            } else {
251
143
              if (yych <= 0xF3) goto yy44;
252
80
              if (yych <= 0xF4) goto yy45;
253
33
              goto yy37;
254
80
            }
255
259
          }
256
512
        }
257
5.31M
      }
258
7.01k
      ++YYCURSOR;
259
7.01k
      {
260
7.01k
    if (s->limit < s->cursor) {
261
7.00k
      return PHP_JSON_T_EOI;
262
7.00k
    } else {
263
12
      s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
264
12
      return PHP_JSON_T_ERROR;
265
12
    }
266
7.01k
  }
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.01k
  }
273
665
yy7:
274
665
      yych = *++YYCURSOR;
275
904
yy8:
276
904
      if (yybm[0+yych] & 64) {
277
201
        goto yy7;
278
201
      }
279
703
      {
280
703
    PHP_JSON_TOKEN_LOCATION(last_column) += PHP_JSON_TOKEN_LENGTH();
281
703
    goto std;
282
904
  }
283
772
yy10:
284
772
      ++YYCURSOR;
285
772
      {
286
772
    PHP_JSON_TOKEN_LOCATION(last_line)++;
287
772
    PHP_JSON_TOKEN_LOCATION(last_column) = 1;
288
772
    goto std;
289
904
  }
290
433
yy12:
291
433
      yych = *++YYCURSOR;
292
433
      if (yych == '\n') goto yy10;
293
239
      goto yy8;
294
522
yy13:
295
522
      ++YYCURSOR;
296
741
yy14:
297
741
      {
298
741
    s->errcode = PHP_JSON_ERROR_SYNTAX;
299
741
    return PHP_JSON_T_ERROR;
300
522
  }
301
58.1k
yy15:
302
58.1k
      ++YYCURSOR;
303
58.1k
      {
304
58.1k
    PHP_JSON_TOKEN_LOCATION(last_column)++;
305
58.1k
    s->str_start = s->cursor;
306
58.1k
    s->str_esc = 0;
307
58.1k
    s->utf8_invalid = 0;
308
58.1k
    s->utf8_invalid_count = 0;
309
58.1k
    PHP_JSON_CONDITION_SET_AND_GOTO(STR_P1);
310
522
  }
311
4.53M
yy17:
312
4.53M
      ++YYCURSOR;
313
4.53M
      { 
314
4.53M
    PHP_JSON_TOKEN_LOCATION(last_column)++;
315
4.53M
    return ','; 
316
522
  }
317
1.02k
yy19:
318
1.02k
      yych = *++YYCURSOR;
319
1.02k
      if (yych <= '/') goto yy14;
320
1.00k
      if (yych <= '0') goto yy20;
321
695
      if (yych <= '9') goto yy22;
322
20
      goto yy14;
323
1.43M
yy20:
324
1.43M
      yyaccept = 0;
325
1.43M
      yych = *(YYMARKER = ++YYCURSOR);
326
1.43M
      if (yych <= 'D') {
327
1.43M
        if (yych == '.') goto yy46;
328
1.43M
      } else {
329
3.55k
        if (yych <= 'E') goto yy48;
330
3.22k
        if (yych == 'e') goto yy48;
331
3.22k
      }
332
1.87M
yy21:
333
1.87M
      {
334
1.87M
    bool bigint = 0, negative = s->token[0] == '-';
335
1.87M
    size_t digits = PHP_JSON_TOKEN_LENGTH();
336
1.87M
    PHP_JSON_TOKEN_LOCATION(last_column) += digits;
337
1.87M
    digits -= negative;
338
1.87M
    if (digits >= PHP_JSON_INT_MAX_LENGTH) {
339
2.55k
      if (digits == PHP_JSON_INT_MAX_LENGTH) {
340
747
        int cmp = strncmp((char *) (s->token + negative), LONG_MIN_DIGITS, PHP_JSON_INT_MAX_LENGTH);
341
747
        if (!(cmp < 0 || (cmp == 0 && negative))) {
342
452
          bigint = 1;
343
452
        }
344
1.80k
      } else {
345
1.80k
        bigint = 1;
346
1.80k
      }
347
2.55k
    }
348
1.87M
    if (!bigint) {
349
1.87M
      ZVAL_LONG(&s->value, ZEND_STRTOL((char *) s->token, NULL, 10));
350
1.87M
      return PHP_JSON_T_INT;
351
1.87M
    } 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.26k
    } else {
355
2.26k
      ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
356
2.26k
      return PHP_JSON_T_DOUBLE;
357
2.26k
    }
358
1.87M
  }
359
21.6M
yy22:
360
21.6M
      yyaccept = 0;
361
21.6M
      yych = *(YYMARKER = ++YYCURSOR);
362
21.6M
      if (yybm[0+yych] & 128) {
363
21.2M
        goto yy22;
364
21.2M
      }
365
460k
      if (yych <= 'D') {
366
447k
        if (yych == '.') goto yy46;
367
439k
        goto yy21;
368
447k
      } else {
369
13.2k
        if (yych <= 'E') goto yy48;
370
11.8k
        if (yych == 'e') goto yy48;
371
2.53k
        goto yy21;
372
11.8k
      }
373
52.4k
yy24:
374
52.4k
      ++YYCURSOR;
375
52.4k
      { 
376
52.4k
    PHP_JSON_TOKEN_LOCATION(last_column)++;
377
52.4k
    return ':'; 
378
460k
  }
379
7.52k
yy26:
380
7.52k
      ++YYCURSOR;
381
7.52k
      { 
382
7.52k
    PHP_JSON_TOKEN_LOCATION(last_column)++;
383
7.52k
    return '['; 
384
460k
  }
385
5.42k
yy28:
386
5.42k
      ++YYCURSOR;
387
5.42k
      { 
388
5.42k
    PHP_JSON_TOKEN_LOCATION(last_column)++;
389
5.42k
    return ']'; 
390
460k
  }
391
265
yy30:
392
265
      yyaccept = 1;
393
265
      yych = *(YYMARKER = ++YYCURSOR);
394
265
      if (yych == 'a') goto yy49;
395
25
      goto yy14;
396
259
yy31:
397
259
      yyaccept = 1;
398
259
      yych = *(YYMARKER = ++YYCURSOR);
399
259
      if (yych == 'u') goto yy50;
400
23
      goto yy14;
401
248
yy32:
402
248
      yyaccept = 1;
403
248
      yych = *(YYMARKER = ++YYCURSOR);
404
248
      if (yych == 'r') goto yy51;
405
23
      goto yy14;
406
2.65M
yy33:
407
2.65M
      ++YYCURSOR;
408
2.65M
      { 
409
2.65M
    PHP_JSON_TOKEN_LOCATION(last_column)++;
410
2.65M
    return '{'; 
411
248
  }
412
2.65M
yy35:
413
2.65M
      ++YYCURSOR;
414
2.65M
      { 
415
2.65M
    PHP_JSON_TOKEN_LOCATION(last_column)++;
416
2.65M
    return '}';
417
248
  }
418
105
yy37:
419
105
      ++YYCURSOR;
420
460
yy38:
421
460
      {
422
460
    s->errcode = PHP_JSON_ERROR_UTF8;
423
460
    return PHP_JSON_T_ERROR;
424
105
  }
425
88
yy39:
426
88
      yych = *++YYCURSOR;
427
88
      if (yych <= 0x7F) goto yy38;
428
43
      if (yych <= 0xBF) goto yy13;
429
24
      goto yy38;
430
35
yy40:
431
35
      yyaccept = 2;
432
35
      yych = *(YYMARKER = ++YYCURSOR);
433
35
      if (yych <= 0x9F) goto yy38;
434
14
      if (yych <= 0xBF) goto yy52;
435
7
      goto yy38;
436
69
yy41:
437
69
      yyaccept = 2;
438
69
      yych = *(YYMARKER = ++YYCURSOR);
439
69
      if (yych <= 0x7F) goto yy38;
440
49
      if (yych <= 0xBF) goto yy52;
441
19
      goto yy38;
442
43
yy42:
443
43
      yyaccept = 2;
444
43
      yych = *(YYMARKER = ++YYCURSOR);
445
43
      if (yych <= 0x7F) goto yy38;
446
36
      if (yych <= 0x9F) goto yy52;
447
19
      goto yy38;
448
56
yy43:
449
56
      yyaccept = 2;
450
56
      yych = *(YYMARKER = ++YYCURSOR);
451
56
      if (yych <= 0x8F) goto yy38;
452
35
      if (yych <= 0xBF) goto yy53;
453
9
      goto yy38;
454
63
yy44:
455
63
      yyaccept = 2;
456
63
      yych = *(YYMARKER = ++YYCURSOR);
457
63
      if (yych <= 0x7F) goto yy38;
458
54
      if (yych <= 0xBF) goto yy53;
459
16
      goto yy38;
460
47
yy45:
461
47
      yyaccept = 2;
462
47
      yych = *(YYMARKER = ++YYCURSOR);
463
47
      if (yych <= 0x7F) goto yy38;
464
44
      if (yych <= 0x8F) goto yy53;
465
25
      goto yy38;
466
9.03k
yy46:
467
9.03k
      yych = *++YYCURSOR;
468
9.03k
      if (yych <= '/') goto yy47;
469
9.00k
      if (yych <= '9') goto yy54;
470
476
yy47:
471
476
      YYCURSOR = YYMARKER;
472
476
      if (yyaccept <= 1) {
473
299
        if (yyaccept == 0) {
474
191
          goto yy21;
475
191
        } else {
476
108
          goto yy14;
477
108
        }
478
299
      } else {
479
177
        if (yyaccept == 2) {
480
110
          goto yy38;
481
110
        } else {
482
67
          goto yy56;
483
67
        }
484
177
      }
485
13.6k
yy48:
486
13.6k
      yych = *++YYCURSOR;
487
13.6k
      if (yych <= ',') {
488
394
        if (yych == '+') goto yy57;
489
132
        goto yy47;
490
13.2k
      } else {
491
13.2k
        if (yych <= '-') goto yy57;
492
7.80k
        if (yych <= '/') goto yy47;
493
7.79k
        if (yych <= '9') goto yy58;
494
24
        goto yy47;
495
7.79k
      }
496
240
yy49:
497
240
      yych = *++YYCURSOR;
498
240
      if (yych == 'l') goto yy60;
499
21
      goto yy47;
500
236
yy50:
501
236
      yych = *++YYCURSOR;
502
236
      if (yych == 'l') goto yy61;
503
17
      goto yy47;
504
225
yy51:
505
225
      yych = *++YYCURSOR;
506
225
      if (yych == 'u') goto yy62;
507
9
      goto yy47;
508
75
yy52:
509
75
      yych = *++YYCURSOR;
510
75
      if (yych <= 0x7F) goto yy47;
511
33
      if (yych <= 0xBF) goto yy13;
512
6
      goto yy47;
513
83
yy53:
514
83
      yych = *++YYCURSOR;
515
83
      if (yych <= 0x7F) goto yy47;
516
44
      if (yych <= 0xBF) goto yy52;
517
23
      goto yy47;
518
58.9M
yy54:
519
58.9M
      yyaccept = 3;
520
58.9M
      yych = *(YYMARKER = ++YYCURSOR);
521
58.9M
      if (yych <= 'D') {
522
58.9M
        if (yych <= '/') goto yy56;
523
58.9M
        if (yych <= '9') goto yy54;
524
58.9M
      } else {
525
2.63k
        if (yych <= 'E') goto yy48;
526
2.32k
        if (yych == 'e') goto yy48;
527
2.32k
      }
528
20.5k
yy56:
529
20.5k
      {
530
20.5k
    PHP_JSON_TOKEN_LOCATION(last_column) += PHP_JSON_TOKEN_LENGTH();
531
20.5k
    ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
532
20.5k
    return PHP_JSON_T_DOUBLE;
533
58.9M
  }
534
5.74k
yy57:
535
5.74k
      yych = *++YYCURSOR;
536
5.74k
      if (yych <= '/') goto yy47;
537
5.71k
      if (yych >= ':') goto yy47;
538
2.60M
yy58:
539
2.60M
      yych = *++YYCURSOR;
540
2.60M
      if (yych <= '/') goto yy56;
541
2.58M
      if (yych <= '9') goto yy58;
542
258
      goto yy56;
543
258
yy60:
544
219
      yych = *++YYCURSOR;
545
219
      if (yych == 's') goto yy63;
546
16
      goto yy47;
547
219
yy61:
548
219
      yych = *++YYCURSOR;
549
219
      if (yych == 'l') goto yy64;
550
17
      goto yy47;
551
216
yy62:
552
216
      yych = *++YYCURSOR;
553
216
      if (yych == 'e') goto yy66;
554
21
      goto yy47;
555
203
yy63:
556
203
      yych = *++YYCURSOR;
557
203
      if (yych == 'e') goto yy68;
558
7
      goto yy47;
559
202
yy64:
560
202
      ++YYCURSOR;
561
202
      {
562
202
    PHP_JSON_TOKEN_LOCATION(last_column) += 4;
563
202
    ZVAL_NULL(&s->value);
564
202
    return PHP_JSON_T_NUL;
565
203
  }
566
195
yy66:
567
195
      ++YYCURSOR;
568
195
      {
569
195
    PHP_JSON_TOKEN_LOCATION(last_column) += 4;
570
195
    ZVAL_TRUE(&s->value);
571
195
    return PHP_JSON_T_TRUE;
572
203
  }
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
203
  }
580
203
    }
581
/* *********************************** */
582
20.6M
yyc_STR_P1:
583
20.6M
    yych = *YYCURSOR;
584
20.6M
    if (yych <= 0xDF) {
585
20.6M
      if (yych <= '[') {
586
12.9M
        if (yych <= 0x1F) goto yy72;
587
12.9M
        if (yych == '"') goto yy76;
588
12.9M
        goto yy74;
589
12.9M
      } else {
590
7.66M
        if (yych <= '\\') goto yy78;
591
7.64M
        if (yych <= 0x7F) goto yy74;
592
329
        if (yych <= 0xC1) goto yy80;
593
305
        goto yy82;
594
329
      }
595
20.6M
    } else {
596
1.73k
      if (yych <= 0xEF) {
597
691
        if (yych <= 0xE0) goto yy83;
598
447
        if (yych == 0xED) goto yy85;
599
278
        goto yy84;
600
1.04k
      } else {
601
1.04k
        if (yych <= 0xF0) goto yy86;
602
757
        if (yych <= 0xF3) goto yy87;
603
282
        if (yych <= 0xF4) goto yy88;
604
14
        goto yy80;
605
282
      }
606
1.73k
    }
607
464
yy72:
608
464
    ++YYCURSOR;
609
464
    {
610
464
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
611
464
    return PHP_JSON_T_ERROR;
612
20.6M
  }
613
20.5M
yy74:
614
20.5M
    ++YYCURSOR;
615
20.5M
    {
616
20.5M
    PHP_JSON_TOKEN_LOCATION(last_column)++;
617
20.5M
    PHP_JSON_CONDITION_GOTO(STR_P1);
618
20.6M
  }
619
55.9k
yy76:
620
55.9k
    ++YYCURSOR;
621
55.9k
    {
622
55.9k
    PHP_JSON_TOKEN_LOCATION(last_column)++;
623
55.9k
    zend_string *str;
624
55.9k
    size_t len = (size_t)(s->cursor - s->str_start - s->str_esc - 1 + s->utf8_invalid_count);
625
55.9k
    if (len == 0) {
626
17.6k
      PHP_JSON_CONDITION_SET(JS);
627
17.6k
      ZVAL_EMPTY_STRING(&s->value);
628
17.6k
      return PHP_JSON_T_ESTRING;
629
17.6k
    }
630
38.3k
    str = zend_string_alloc(len, 0);
631
38.3k
    ZSTR_VAL(str)[len] = '\0';
632
38.3k
    ZVAL_STR(&s->value, str);
633
38.3k
    if (s->str_esc || s->utf8_invalid) {
634
4.00k
      s->pstr = (php_json_ctype *) Z_STRVAL(s->value);
635
4.00k
      s->cursor = s->str_start;
636
4.00k
      PHP_JSON_CONDITION_GOTO_STR_P2();
637
34.3k
    } else {
638
34.3k
      memcpy(Z_STRVAL(s->value), s->str_start, len);
639
34.3k
      PHP_JSON_CONDITION_SET(JS);
640
34.3k
      return PHP_JSON_T_STRING;
641
34.3k
    }
642
38.3k
  }
643
20.0k
yy78:
644
20.0k
    yyaccept = 0;
645
20.0k
    yych = *(YYMARKER = ++YYCURSOR);
646
20.0k
    if (yych <= 'e') {
647
2.01k
      if (yych <= '/') {
648
972
        if (yych == '"') goto yy89;
649
531
        if (yych >= '/') goto yy89;
650
1.04k
      } else {
651
1.04k
        if (yych <= '\\') {
652
583
          if (yych >= '\\') goto yy89;
653
583
        } else {
654
463
          if (yych == 'b') goto yy89;
655
463
        }
656
1.04k
      }
657
18.0k
    } else {
658
18.0k
      if (yych <= 'q') {
659
1.07k
        if (yych <= 'f') goto yy89;
660
474
        if (yych == 'n') goto yy89;
661
16.9k
      } else {
662
16.9k
        if (yych <= 's') {
663
529
          if (yych <= 'r') goto yy89;
664
16.4k
        } else {
665
16.4k
          if (yych <= 't') goto yy89;
666
15.9k
          if (yych <= 'u') goto yy91;
667
15.9k
        }
668
16.9k
      }
669
18.0k
    }
670
1.08k
yy79:
671
1.08k
    {
672
1.08k
    s->errcode = PHP_JSON_ERROR_SYNTAX;
673
1.08k
    return PHP_JSON_T_ERROR;
674
20.0k
  }
675
38
yy80:
676
38
    ++YYCURSOR;
677
382
yy81:
678
382
    {
679
382
    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
382
    s->errcode = PHP_JSON_ERROR_UTF8;
693
382
    return PHP_JSON_T_ERROR;
694
382
  }
695
305
yy82:
696
305
    yych = *++YYCURSOR;
697
305
    if (yych <= 0x7F) goto yy81;
698
294
    if (yych <= 0xBF) goto yy93;
699
19
    goto yy81;
700
244
yy83:
701
244
    yyaccept = 1;
702
244
    yych = *(YYMARKER = ++YYCURSOR);
703
244
    if (yych <= 0x9F) goto yy81;
704
229
    if (yych <= 0xBF) goto yy95;
705
7
    goto yy81;
706
278
yy84:
707
278
    yyaccept = 1;
708
278
    yych = *(YYMARKER = ++YYCURSOR);
709
278
    if (yych <= 0x7F) goto yy81;
710
263
    if (yych <= 0xBF) goto yy95;
711
8
    goto yy81;
712
169
yy85:
713
169
    yyaccept = 1;
714
169
    yych = *(YYMARKER = ++YYCURSOR);
715
169
    if (yych <= 0x7F) goto yy81;
716
164
    if (yych <= 0x9F) goto yy95;
717
13
    goto yy81;
718
284
yy86:
719
284
    yyaccept = 1;
720
284
    yych = *(YYMARKER = ++YYCURSOR);
721
284
    if (yych <= 0x8F) goto yy81;
722
279
    if (yych <= 0xBF) goto yy96;
723
7
    goto yy81;
724
475
yy87:
725
475
    yyaccept = 1;
726
475
    yych = *(YYMARKER = ++YYCURSOR);
727
475
    if (yych <= 0x7F) goto yy81;
728
472
    if (yych <= 0xBF) goto yy96;
729
17
    goto yy81;
730
268
yy88:
731
268
    yyaccept = 1;
732
268
    yych = *(YYMARKER = ++YYCURSOR);
733
268
    if (yych <= 0x7F) goto yy81;
734
265
    if (yych <= 0x8F) goto yy96;
735
13
    goto yy81;
736
4.01k
yy89:
737
4.01k
    ++YYCURSOR;
738
4.01k
    {
739
4.01k
    PHP_JSON_TOKEN_LOCATION(last_column) += 2;
740
4.01k
    s->str_esc++;
741
4.01k
    PHP_JSON_CONDITION_GOTO(STR_P1);
742
265
  }
743
15.9k
yy91:
744
15.9k
    yych = *++YYCURSOR;
745
15.9k
    if (yych <= 'D') {
746
12.0k
      if (yych <= '9') {
747
9.43k
        if (yych <= '/') goto yy92;
748
9.41k
        if (yych <= '0') goto yy97;
749
544
        goto yy98;
750
9.41k
      } else {
751
2.61k
        if (yych <= '@') goto yy92;
752
2.60k
        if (yych <= 'C') goto yy98;
753
2.17k
        goto yy99;
754
2.60k
      }
755
12.0k
    } else {
756
3.89k
      if (yych <= 'c') {
757
1.14k
        if (yych <= 'F') goto yy98;
758
322
        if (yych >= 'a') goto yy98;
759
2.75k
      } else {
760
2.75k
        if (yych <= 'd') goto yy99;
761
532
        if (yych <= 'f') goto yy98;
762
532
      }
763
3.89k
    }
764
1.37k
yy92:
765
1.37k
    YYCURSOR = YYMARKER;
766
1.37k
    if (yyaccept <= 1) {
767
1.19k
      if (yyaccept == 0) {
768
990
        goto yy79;
769
990
      } else {
770
203
        goto yy81;
771
203
      }
772
1.19k
    } else {
773
184
      goto yy122;
774
184
    }
775
275
yy93:
776
275
    ++YYCURSOR;
777
275
    {
778
275
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
779
275
    PHP_JSON_CONDITION_GOTO(STR_P1);
780
1.37k
  }
781
628
yy95:
782
628
    yych = *++YYCURSOR;
783
628
    if (yych <= 0x7F) goto yy92;
784
562
    if (yych <= 0xBF) goto yy100;
785
21
    goto yy92;
786
979
yy96:
787
979
    yych = *++YYCURSOR;
788
979
    if (yych <= 0x7F) goto yy92;
789
906
    if (yych <= 0xBF) goto yy102;
790
9
    goto yy92;
791
8.87k
yy97:
792
8.87k
    yych = *++YYCURSOR;
793
8.87k
    if (yych <= '9') {
794
8.26k
      if (yych <= '/') goto yy92;
795
8.26k
      if (yych <= '0') goto yy103;
796
2.39k
      if (yych <= '7') goto yy104;
797
451
      goto yy105;
798
2.39k
    } else {
799
604
      if (yych <= 'F') {
800
267
        if (yych <= '@') goto yy92;
801
260
        goto yy105;
802
337
      } else {
803
337
        if (yych <= '`') goto yy92;
804
333
        if (yych <= 'f') goto yy105;
805
23
        goto yy92;
806
333
      }
807
604
    }
808
2.61k
yy98:
809
2.61k
    yych = *++YYCURSOR;
810
2.61k
    if (yych <= '@') {
811
919
      if (yych <= '/') goto yy92;
812
845
      if (yych <= '9') goto yy105;
813
9
      goto yy92;
814
1.69k
    } else {
815
1.69k
      if (yych <= 'F') goto yy105;
816
801
      if (yych <= '`') goto yy92;
817
798
      if (yych <= 'f') goto yy105;
818
11
      goto yy92;
819
798
    }
820
4.39k
yy99:
821
4.39k
    yych = *++YYCURSOR;
822
4.39k
    if (yych <= 'B') {
823
2.49k
      if (yych <= '7') {
824
981
        if (yych <= '/') goto yy92;
825
945
        goto yy105;
826
1.50k
      } else {
827
1.50k
        if (yych <= '9') goto yy106;
828
1.01k
        if (yych <= '@') goto yy92;
829
1.00k
        goto yy106;
830
1.01k
      }
831
2.49k
    } else {
832
1.90k
      if (yych <= '`') {
833
81
        if (yych <= 'F') goto yy107;
834
13
        goto yy92;
835
1.81k
      } else {
836
1.81k
        if (yych <= 'b') goto yy106;
837
77
        if (yych <= 'f') goto yy107;
838
21
        goto yy92;
839
77
      }
840
1.90k
    }
841
541
yy100:
842
541
    ++YYCURSOR;
843
541
    {
844
541
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
845
541
    PHP_JSON_CONDITION_GOTO(STR_P1);
846
4.39k
  }
847
897
yy102:
848
897
    yych = *++YYCURSOR;
849
897
    if (yych <= 0x7F) goto yy92;
850
876
    if (yych <= 0xBF) goto yy108;
851
13
    goto yy92;
852
5.86k
yy103:
853
5.86k
    yych = *++YYCURSOR;
854
5.86k
    if (yych <= '@') {
855
5.11k
      if (yych <= '/') goto yy92;
856
5.10k
      if (yych <= '7') goto yy110;
857
683
      if (yych <= '9') goto yy111;
858
7
      goto yy92;
859
753
    } else {
860
753
      if (yych <= 'F') goto yy111;
861
452
      if (yych <= '`') goto yy92;
862
441
      if (yych <= 'f') goto yy111;
863
17
      goto yy92;
864
441
    }
865
1.94k
yy104:
866
1.94k
    yych = *++YYCURSOR;
867
1.94k
    if (yych <= '@') {
868
1.00k
      if (yych <= '/') goto yy92;
869
985
      if (yych <= '9') goto yy111;
870
7
      goto yy92;
871
985
    } else {
872
937
      if (yych <= 'F') goto yy111;
873
533
      if (yych <= '`') goto yy92;
874
522
      if (yych <= 'f') goto yy111;
875
13
      goto yy92;
876
522
    }
877
4.48k
yy105:
878
4.48k
    yych = *++YYCURSOR;
879
4.48k
    if (yych <= '@') {
880
2.50k
      if (yych <= '/') goto yy92;
881
2.39k
      if (yych <= '9') goto yy112;
882
7
      goto yy92;
883
2.39k
    } else {
884
1.97k
      if (yych <= 'F') goto yy112;
885
773
      if (yych <= '`') goto yy92;
886
762
      if (yych <= 'f') goto yy112;
887
13
      goto yy92;
888
762
    }
889
3.24k
yy106:
890
3.24k
    yych = *++YYCURSOR;
891
3.24k
    if (yych <= '@') {
892
702
      if (yych <= '/') goto yy92;
893
663
      if (yych <= '9') goto yy113;
894
7
      goto yy92;
895
2.53k
    } else {
896
2.53k
      if (yych <= 'F') goto yy113;
897
1.46k
      if (yych <= '`') goto yy92;
898
1.45k
      if (yych <= 'f') goto yy113;
899
15
      goto yy92;
900
1.45k
    }
901
124
yy107:
902
124
    yych = *++YYCURSOR;
903
124
    if (yych <= '@') {
904
55
      if (yych <= '/') goto yy92;
905
31
      if (yych <= '9') goto yy114;
906
5
      goto yy92;
907
69
    } else {
908
69
      if (yych <= 'F') goto yy114;
909
44
      if (yych <= '`') goto yy92;
910
41
      if (yych <= 'f') goto yy114;
911
17
      goto yy92;
912
41
    }
913
863
yy108:
914
863
    ++YYCURSOR;
915
863
    {
916
863
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
917
863
    PHP_JSON_CONDITION_GOTO(STR_P1);
918
124
  }
919
4.42k
yy110:
920
4.42k
    yych = *++YYCURSOR;
921
4.42k
    if (yych <= '@') {
922
2.92k
      if (yych <= '/') goto yy92;
923
2.91k
      if (yych <= '9') goto yy115;
924
3
      goto yy92;
925
2.91k
    } else {
926
1.49k
      if (yych <= 'F') goto yy115;
927
1.15k
      if (yych <= '`') goto yy92;
928
1.15k
      if (yych <= 'f') goto yy115;
929
13
      goto yy92;
930
1.15k
    }
931
3.29k
yy111:
932
3.29k
    yych = *++YYCURSOR;
933
3.29k
    if (yych <= '@') {
934
1.66k
      if (yych <= '/') goto yy92;
935
1.58k
      if (yych <= '9') goto yy117;
936
5
      goto yy92;
937
1.62k
    } else {
938
1.62k
      if (yych <= 'F') goto yy117;
939
1.01k
      if (yych <= '`') goto yy92;
940
1.00k
      if (yych <= 'f') goto yy117;
941
13
      goto yy92;
942
1.00k
    }
943
4.34k
yy112:
944
4.34k
    yych = *++YYCURSOR;
945
4.34k
    if (yych <= '@') {
946
2.21k
      if (yych <= '/') goto yy92;
947
2.16k
      if (yych <= '9') goto yy119;
948
9
      goto yy92;
949
2.16k
    } else {
950
2.12k
      if (yych <= 'F') goto yy119;
951
771
      if (yych <= '`') goto yy92;
952
764
      if (yych <= 'f') goto yy119;
953
19
      goto yy92;
954
764
    }
955
3.17k
yy113:
956
3.17k
    yych = *++YYCURSOR;
957
3.17k
    if (yych <= '@') {
958
521
      if (yych <= '/') goto yy92;
959
481
      if (yych <= '9') goto yy121;
960
7
      goto yy92;
961
2.64k
    } else {
962
2.64k
      if (yych <= 'F') goto yy121;
963
879
      if (yych <= '`') goto yy92;
964
870
      if (yych <= 'f') goto yy121;
965
15
      goto yy92;
966
870
    }
967
75
yy114:
968
75
    yych = *++YYCURSOR;
969
75
    if (yych <= '@') {
970
43
      if (yych <= '/') goto yy92;
971
16
      if (yych <= '9') goto yy123;
972
7
      goto yy92;
973
32
    } else {
974
32
      if (yych <= 'F') goto yy123;
975
29
      if (yych <= '`') goto yy92;
976
20
      if (yych <= 'f') goto yy123;
977
15
      goto yy92;
978
20
    }
979
4.38k
yy115:
980
4.38k
    ++YYCURSOR;
981
4.38k
    {
982
4.38k
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
983
4.38k
    s->str_esc += 5;
984
4.38k
    PHP_JSON_CONDITION_GOTO(STR_P1);
985
75
  }
986
3.18k
yy117:
987
3.18k
    ++YYCURSOR;
988
3.18k
    {
989
3.18k
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
990
3.18k
    s->str_esc += 4;
991
3.18k
    PHP_JSON_CONDITION_GOTO(STR_P1);
992
75
  }
993
4.25k
yy119:
994
4.25k
    ++YYCURSOR;
995
4.25k
    {
996
4.25k
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
997
4.25k
    s->str_esc += 3;
998
4.25k
    PHP_JSON_CONDITION_GOTO(STR_P1);
999
75
  }
1000
3.09k
yy121:
1001
3.09k
    yyaccept = 2;
1002
3.09k
    yych = *(YYMARKER = ++YYCURSOR);
1003
3.09k
    if (yych == '\\') goto yy124;
1004
253
yy122:
1005
253
    {
1006
253
    s->errcode = PHP_JSON_ERROR_UTF16;
1007
253
    return PHP_JSON_T_ERROR;
1008
3.09k
  }
1009
17
yy123:
1010
17
    ++YYCURSOR;
1011
17
    goto yy122;
1012
3.04k
yy124:
1013
3.04k
    yych = *++YYCURSOR;
1014
3.04k
    if (yych != 'u') goto yy92;
1015
3.03k
    yych = *++YYCURSOR;
1016
3.03k
    if (yych == 'D') goto yy126;
1017
856
    if (yych != 'd') goto yy92;
1018
3.01k
yy126:
1019
3.01k
    yych = *++YYCURSOR;
1020
3.01k
    if (yych <= 'B') goto yy92;
1021
2.98k
    if (yych <= 'F') goto yy127;
1022
1.57k
    if (yych <= 'b') goto yy92;
1023
1.57k
    if (yych >= 'g') goto yy92;
1024
2.97k
yy127:
1025
2.97k
    yych = *++YYCURSOR;
1026
2.97k
    if (yych <= '@') {
1027
951
      if (yych <= '/') goto yy92;
1028
923
      if (yych >= ':') goto yy92;
1029
2.02k
    } else {
1030
2.02k
      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.92k
yy128:
1035
2.92k
    yych = *++YYCURSOR;
1036
2.92k
    if (yych <= '@') {
1037
910
      if (yych <= '/') goto yy92;
1038
869
      if (yych >= ':') goto yy92;
1039
2.01k
    } else {
1040
2.01k
      if (yych <= 'F') goto yy129;
1041
994
      if (yych <= '`') goto yy92;
1042
991
      if (yych >= 'g') goto yy92;
1043
991
    }
1044
2.86k
yy129:
1045
2.86k
    ++YYCURSOR;
1046
2.86k
    {
1047
2.86k
    PHP_JSON_TOKEN_LOCATION(last_column) += 1;
1048
2.86k
    s->str_esc += 8;
1049
2.86k
    PHP_JSON_CONDITION_GOTO(STR_P1);
1050
2.92k
  }
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.6M
yyc_STR_P2_UTF:
1436
12.6M
    yych = *YYCURSOR;
1437
12.6M
    if (yych == '"') goto yy181;
1438
12.6M
    if (yych == '\\') goto yy183;
1439
12.5M
    ++YYCURSOR;
1440
12.5M
    { PHP_JSON_CONDITION_GOTO(STR_P2_UTF); }
1441
4.00k
yy181:
1442
4.00k
    ++YYCURSOR;
1443
4.00k
    YYSETCONDITION(yycJS);
1444
4.00k
    {
1445
4.00k
    PHP_JSON_SCANNER_COPY_ESC();
1446
4.00k
    return PHP_JSON_T_STRING;
1447
12.6M
  }
1448
13.9k
yy183:
1449
13.9k
    yych = *(YYMARKER = ++YYCURSOR);
1450
13.9k
    if (yych == 'u') goto yy185;
1451
2.86k
yy184:
1452
2.86k
    {
1453
2.86k
    unsigned char esc;
1454
2.86k
    PHP_JSON_SCANNER_COPY_ESC();
1455
2.86k
    switch (*s->cursor) {
1456
257
      case 'b':
1457
257
        esc = '\b';
1458
257
        break;
1459
541
      case 'f':
1460
541
        esc = '\f';       break;
1461
391
      case 'n':
1462
391
        esc = '\n';
1463
391
        break;
1464
334
      case 'r':
1465
334
        esc = '\r';
1466
334
        break;
1467
269
      case 't':
1468
269
        esc = '\t';
1469
269
        break;
1470
376
      case '\\':
1471
820
      case '/':
1472
1.06k
      case '"':
1473
1.06k
        esc = *s->cursor;
1474
1.06k
        break;
1475
0
      default:
1476
0
        s->errcode = PHP_JSON_ERROR_SYNTAX;
1477
0
        return PHP_JSON_T_ERROR;
1478
2.86k
    }
1479
2.86k
    *(s->pstr++) = esc;
1480
2.86k
    ++YYCURSOR;
1481
2.86k
    s->str_start = s->cursor;
1482
2.86k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1483
2.86k
  }
1484
11.0k
yy185:
1485
11.0k
    yych = *++YYCURSOR;
1486
11.0k
    if (yych <= 'D') {
1487
9.32k
      if (yych <= '9') {
1488
7.74k
        if (yych <= '/') goto yy186;
1489
7.74k
        if (yych <= '0') goto yy187;
1490
358
        goto yy188;
1491
7.74k
      } else {
1492
1.58k
        if (yych <= '@') goto yy186;
1493
1.58k
        if (yych <= 'C') goto yy188;
1494
1.37k
        goto yy189;
1495
1.58k
      }
1496
9.32k
    } else {
1497
1.73k
      if (yych <= 'c') {
1498
457
        if (yych <= 'F') goto yy188;
1499
209
        if (yych >= 'a') goto yy188;
1500
1.27k
      } else {
1501
1.27k
        if (yych <= 'd') goto yy189;
1502
254
        if (yych <= 'f') goto yy188;
1503
254
      }
1504
1.73k
    }
1505
0
yy186:
1506
0
    YYCURSOR = YYMARKER;
1507
0
    goto yy184;
1508
7.38k
yy187:
1509
7.38k
    yych = *++YYCURSOR;
1510
7.38k
    if (yych <= '9') {
1511
6.89k
      if (yych <= '/') goto yy186;
1512
6.89k
      if (yych <= '0') goto yy190;
1513
1.71k
      if (yych <= '7') goto yy191;
1514
216
      goto yy192;
1515
1.71k
    } else {
1516
493
      if (yych <= 'F') {
1517
221
        if (yych <= '@') goto yy186;
1518
221
        goto yy192;
1519
272
      } else {
1520
272
        if (yych <= '`') goto yy186;
1521
272
        if (yych <= 'f') goto yy192;
1522
0
        goto yy186;
1523
272
      }
1524
493
    }
1525
1.27k
yy188:
1526
1.27k
    yych = *++YYCURSOR;
1527
1.27k
    if (yych <= '@') {
1528
470
      if (yych <= '/') goto yy186;
1529
470
      if (yych <= '9') goto yy192;
1530
0
      goto yy186;
1531
807
    } else {
1532
807
      if (yych <= 'F') goto yy192;
1533
483
      if (yych <= '`') goto yy186;
1534
483
      if (yych <= 'f') goto yy192;
1535
0
      goto yy186;
1536
483
    }
1537
2.39k
yy189:
1538
2.39k
    yych = *++YYCURSOR;
1539
2.39k
    if (yych <= '@') {
1540
1.10k
      if (yych <= '/') goto yy186;
1541
1.10k
      if (yych <= '7') goto yy192;
1542
319
      if (yych <= '9') goto yy193;
1543
0
      goto yy186;
1544
1.29k
    } else {
1545
1.29k
      if (yych <= 'B') goto yy193;
1546
695
      if (yych <= '`') goto yy186;
1547
695
      if (yych <= 'b') goto yy193;
1548
0
      goto yy186;
1549
695
    }
1550
5.18k
yy190:
1551
5.18k
    yych = *++YYCURSOR;
1552
5.18k
    if (yych <= '@') {
1553
4.61k
      if (yych <= '/') goto yy186;
1554
4.61k
      if (yych <= '7') goto yy194;
1555
549
      if (yych <= '9') goto yy195;
1556
0
      goto yy186;
1557
568
    } else {
1558
568
      if (yych <= 'F') goto yy195;
1559
360
      if (yych <= '`') goto yy186;
1560
360
      if (yych <= 'f') goto yy195;
1561
0
      goto yy186;
1562
360
    }
1563
1.49k
yy191:
1564
1.49k
    yych = *++YYCURSOR;
1565
1.49k
    if (yych <= '@') {
1566
896
      if (yych <= '/') goto yy186;
1567
896
      if (yych <= '9') goto yy195;
1568
0
      goto yy186;
1569
896
    } else {
1570
598
      if (yych <= 'F') goto yy195;
1571
286
      if (yych <= '`') goto yy186;
1572
286
      if (yych <= 'f') goto yy195;
1573
0
      goto yy186;
1574
286
    }
1575
2.77k
yy192:
1576
2.77k
    yych = *++YYCURSOR;
1577
2.77k
    if (yych <= '@') {
1578
1.72k
      if (yych <= '/') goto yy186;
1579
1.72k
      if (yych <= '9') goto yy196;
1580
0
      goto yy186;
1581
1.72k
    } else {
1582
1.04k
      if (yych <= 'F') goto yy196;
1583
470
      if (yych <= '`') goto yy186;
1584
470
      if (yych <= 'f') goto yy196;
1585
0
      goto yy186;
1586
470
    }
1587
1.61k
yy193:
1588
1.61k
    yych = *++YYCURSOR;
1589
1.61k
    if (yych <= '@') {
1590
498
      if (yych <= '/') goto yy186;
1591
498
      if (yych <= '9') goto yy197;
1592
0
      goto yy186;
1593
1.11k
    } else {
1594
1.11k
      if (yych <= 'F') goto yy197;
1595
604
      if (yych <= '`') goto yy186;
1596
604
      if (yych <= 'f') goto yy197;
1597
0
      goto yy186;
1598
604
    }
1599
4.06k
yy194:
1600
4.06k
    yych = *++YYCURSOR;
1601
4.06k
    if (yych <= '@') {
1602
2.81k
      if (yych <= '/') goto yy186;
1603
2.81k
      if (yych <= '9') goto yy198;
1604
0
      goto yy186;
1605
2.81k
    } else {
1606
1.24k
      if (yych <= 'F') goto yy198;
1607
981
      if (yych <= '`') goto yy186;
1608
981
      if (yych <= 'f') goto yy198;
1609
0
      goto yy186;
1610
981
    }
1611
2.61k
yy195:
1612
2.61k
    yych = *++YYCURSOR;
1613
2.61k
    if (yych <= '@') {
1614
1.38k
      if (yych <= '/') goto yy186;
1615
1.38k
      if (yych <= '9') goto yy200;
1616
0
      goto yy186;
1617
1.38k
    } else {
1618
1.22k
      if (yych <= 'F') goto yy200;
1619
745
      if (yych <= '`') goto yy186;
1620
745
      if (yych <= 'f') goto yy200;
1621
0
      goto yy186;
1622
745
    }
1623
2.77k
yy196:
1624
2.77k
    yych = *++YYCURSOR;
1625
2.77k
    if (yych <= '@') {
1626
1.54k
      if (yych <= '/') goto yy186;
1627
1.54k
      if (yych <= '9') goto yy202;
1628
0
      goto yy186;
1629
1.54k
    } else {
1630
1.22k
      if (yych <= 'F') goto yy202;
1631
471
      if (yych <= '`') goto yy186;
1632
471
      if (yych <= 'f') goto yy202;
1633
0
      goto yy186;
1634
471
    }
1635
1.61k
yy197:
1636
1.61k
    yych = *++YYCURSOR;
1637
1.61k
    if (yych <= '@') {
1638
341
      if (yych <= '/') goto yy186;
1639
341
      if (yych <= '9') goto yy204;
1640
0
      goto yy186;
1641
1.27k
    } else {
1642
1.27k
      if (yych <= 'F') goto yy204;
1643
363
      if (yych <= '`') goto yy186;
1644
363
      if (yych <= 'f') goto yy204;
1645
0
      goto yy186;
1646
363
    }
1647
4.06k
yy198:
1648
4.06k
    ++YYCURSOR;
1649
4.06k
    {
1650
4.06k
    int utf16 = php_json_ucs2_to_int(s, 2);
1651
4.06k
    PHP_JSON_SCANNER_COPY_UTF();
1652
4.06k
    *(s->pstr++) = (unsigned char) utf16;
1653
4.06k
    s->str_start = s->cursor;
1654
4.06k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1655
4.06k
  }
1656
2.61k
yy200:
1657
2.61k
    ++YYCURSOR;
1658
2.61k
    {
1659
2.61k
    int utf16 = php_json_ucs2_to_int(s, 3);
1660
2.61k
    PHP_JSON_SCANNER_COPY_UTF();
1661
2.61k
    *(s->pstr++) = (unsigned char) (0xc0 | (utf16 >> 6));
1662
2.61k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1663
2.61k
    s->str_start = s->cursor;
1664
2.61k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1665
2.61k
  }
1666
2.77k
yy202:
1667
2.77k
    ++YYCURSOR;
1668
2.77k
    {
1669
2.77k
    int utf16 = php_json_ucs2_to_int(s, 4);
1670
2.77k
    PHP_JSON_SCANNER_COPY_UTF();
1671
2.77k
    *(s->pstr++) = (unsigned char) (0xe0 | (utf16 >> 12));
1672
2.77k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf16 >> 6) & 0x3f));
1673
2.77k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1674
2.77k
    s->str_start = s->cursor;
1675
2.77k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1676
2.77k
  }
1677
1.61k
yy204:
1678
1.61k
    yych = *++YYCURSOR;
1679
1.61k
    if (yych != '\\') goto yy186;
1680
1.61k
    yych = *++YYCURSOR;
1681
1.61k
    if (yych != 'u') goto yy186;
1682
1.61k
    yych = *++YYCURSOR;
1683
1.61k
    if (yych == 'D') goto yy207;
1684
357
    if (yych != 'd') goto yy186;
1685
1.61k
yy207:
1686
1.61k
    yych = *++YYCURSOR;
1687
1.61k
    if (yych <= 'B') goto yy186;
1688
1.61k
    if (yych <= 'F') goto yy208;
1689
780
    if (yych <= 'b') goto yy186;
1690
780
    if (yych >= 'g') goto yy186;
1691
1.61k
yy208:
1692
1.61k
    yych = *++YYCURSOR;
1693
1.61k
    if (yych <= '@') {
1694
580
      if (yych <= '/') goto yy186;
1695
580
      if (yych >= ':') goto yy186;
1696
1.03k
    } else {
1697
1.03k
      if (yych <= 'F') goto yy209;
1698
558
      if (yych <= '`') goto yy186;
1699
558
      if (yych >= 'g') goto yy186;
1700
558
    }
1701
1.61k
yy209:
1702
1.61k
    yych = *++YYCURSOR;
1703
1.61k
    if (yych <= '@') {
1704
535
      if (yych <= '/') goto yy186;
1705
535
      if (yych >= ':') goto yy186;
1706
1.07k
    } else {
1707
1.07k
      if (yych <= 'F') goto yy210;
1708
531
      if (yych <= '`') goto yy186;
1709
531
      if (yych >= 'g') goto yy186;
1710
531
    }
1711
1.61k
yy210:
1712
1.61k
    ++YYCURSOR;
1713
1.61k
    {
1714
1.61k
    int utf32, utf16_hi, utf16_lo;
1715
1.61k
    utf16_hi = php_json_ucs2_to_int(s, 4);
1716
1.61k
    utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
1717
1.61k
    utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
1718
1.61k
    PHP_JSON_SCANNER_COPY_UTF_SP();
1719
1.61k
    *(s->pstr++) = (unsigned char) (0xf0 | (utf32 >> 18));
1720
1.61k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 12) & 0x3f));
1721
1.61k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 6) & 0x3f));
1722
1.61k
    *(s->pstr++) = (unsigned char) (0x80 | (utf32 & 0x3f));
1723
1.61k
    s->str_start = s->cursor;
1724
1.61k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1725
1.61k
  }
1726
1.61k
  }
1727
1728
1729
1.61k
}