Coverage Report

Created: 2026-02-09 07:07

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