Coverage Report

Created: 2026-04-01 06:49

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