Coverage Report

Created: 2026-07-25 06:39

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