Coverage Report

Created: 2025-12-31 07:28

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