Coverage Report

Created: 2025-11-16 06:23

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
12.2M
#define YYCTYPE     php_json_ctype
25
196M
#define YYCURSOR    s->cursor
26
#define YYLIMIT     s->limit
27
68.3M
#define YYMARKER    s->marker
28
#define YYCTXMARKER s->ctxmarker
29
30
24.4M
#define YYGETCONDITION()        s->state
31
130k
#define YYSETCONDITION(yystate) s->state = yystate
32
33
#define YYFILL(n)
34
35
126k
#define PHP_JSON_CONDITION_SET(condition) YYSETCONDITION(yyc##condition)
36
49.8M
#define PHP_JSON_CONDITION_GOTO(condition) goto yyc_##condition
37
#define PHP_JSON_CONDITION_SET_AND_GOTO(condition) \
38
59.9k
  PHP_JSON_CONDITION_SET(condition); \
39
59.9k
  PHP_JSON_CONDITION_GOTO(condition)
40
#define PHP_JSON_CONDITION_GOTO_STR_P2() \
41
75.6k
  do { \
42
75.6k
    if (s->utf8_invalid) { \
43
0
      PHP_JSON_CONDITION_GOTO(STR_P2_BIN); \
44
75.6k
    } else { \
45
75.6k
      PHP_JSON_CONDITION_GOTO(STR_P2_UTF); \
46
75.6k
    } \
47
75.6k
  } while(0)
48
49
50
19.4k
#define PHP_JSON_SCANNER_COPY_ESC() php_json_scanner_copy_string(s, 0)
51
54.7k
#define PHP_JSON_SCANNER_COPY_UTF() php_json_scanner_copy_string(s, 5)
52
1.54k
#define PHP_JSON_SCANNER_COPY_UTF_SP() php_json_scanner_copy_string(s, 11)
53
54
1.18M
#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
75.6k
{
59
75.6k
  size_t len = (size_t)(s->cursor - s->str_start - esc_size - 1);
60
75.6k
  if (len) {
61
24.0k
    memcpy(s->pstr, s->str_start, len);
62
24.0k
    s->pstr += len;
63
24.0k
  }
64
75.6k
}
65
66
static int php_json_hex_to_int(unsigned char code)
67
170k
{
68
170k
  if (code >= '0' && code <= '9') {
69
75.3k
    return code - '0';
70
95.0k
  } else if (code >= 'A' && code <= 'F') {
71
74.3k
    return code - ('A' - 10);
72
74.3k
  } else if (code >= 'a' && code <= 'f') {
73
20.7k
    return code - ('a' - 10);
74
20.7k
  } else {
75
    /* this should never happened (just to suppress compiler warning) */
76
0
    return -1;
77
0
  }
78
170k
}
79
80
static int php_json_ucs2_to_int_ex(php_json_scanner *s, int size, int start)
81
57.8k
{
82
57.8k
  int i, code = 0;
83
57.8k
  php_json_ctype *pc = s->cursor - start;
84
228k
  for (i = 0; i < size; i++) {
85
170k
    code |= php_json_hex_to_int(*(pc--)) << (i * 4);
86
170k
  }
87
57.8k
  return code;
88
57.8k
}
89
90
static int php_json_ucs2_to_int(php_json_scanner *s, int size)
91
56.2k
{
92
56.2k
  return php_json_ucs2_to_int_ex(s, size, 1);
93
56.2k
}
94
95
void php_json_scanner_init(php_json_scanner *s, const char *str, size_t str_len, int options)
96
12.4k
{
97
12.4k
  s->cursor = (php_json_ctype *) str;
98
12.4k
  s->limit = (php_json_ctype *) str + str_len;
99
12.4k
  s->options = options;
100
12.4k
  PHP_JSON_CONDITION_SET(JS);
101
12.4k
}
102
103
int php_json_scan(php_json_scanner *s)
104
12.2M
{
105
12.2M
  ZVAL_NULL(&s->value);
106
107
12.2M
std:
108
12.2M
  s->token = s->cursor;
109
110
111
12.2M
  {
112
12.2M
    YYCTYPE yych;
113
12.2M
    unsigned int yyaccept = 0;
114
12.2M
    if (YYGETCONDITION() < 2) {
115
12.2M
      if (YYGETCONDITION() < 1) {
116
12.2M
        goto yyc_JS;
117
12.2M
      } else {
118
0
        goto yyc_STR_P1;
119
0
      }
120
12.2M
    } 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
12.2M
yyc_JS:
129
12.2M
    {
130
12.2M
      static const unsigned char yybm[] = {
131
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
132
12.2M
          0,  64,   0,   0,   0,  64,   0,   0, 
133
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
134
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
135
12.2M
         64,   0,   0,   0,   0,   0,   0,   0, 
136
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
137
12.2M
        128, 128, 128, 128, 128, 128, 128, 128, 
138
12.2M
        128, 128,   0,   0,   0,   0,   0,   0, 
139
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
140
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
141
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
142
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
143
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
144
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
145
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
146
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
147
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
148
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
149
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
150
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
151
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
152
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
153
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
154
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
155
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
156
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
157
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
158
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
159
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
160
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
161
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
162
12.2M
          0,   0,   0,   0,   0,   0,   0,   0, 
163
12.2M
      };
164
12.2M
      yych = *YYCURSOR;
165
12.2M
      if (yych <= ']') {
166
5.76M
        if (yych <= '"') {
167
68.6k
          if (yych <= '\f') {
168
7.94k
            if (yych <= 0x08) {
169
7.08k
              if (yych >= 0x01) goto yy5;
170
7.08k
            } else {
171
857
              if (yych <= '\t') goto yy7;
172
622
              if (yych <= '\n') goto yy10;
173
9
              goto yy5;
174
622
            }
175
60.7k
          } else {
176
60.7k
            if (yych <= 0x1F) {
177
469
              if (yych <= '\r') goto yy11;
178
33
              goto yy5;
179
60.2k
            } else {
180
60.2k
              if (yych <= ' ') goto yy7;
181
59.9k
              if (yych <= '!') goto yy12;
182
59.9k
              goto yy14;
183
59.9k
            }
184
60.7k
          }
185
5.69M
        } else {
186
5.69M
          if (yych <= '0') {
187
4.45M
            if (yych <= ',') {
188
4.42M
              if (yych <= '+') goto yy12;
189
4.42M
              goto yy16;
190
4.42M
            } else {
191
31.0k
              if (yych <= '-') goto yy18;
192
29.8k
              if (yych <= '/') goto yy12;
193
29.7k
              goto yy19;
194
29.8k
            }
195
4.45M
          } else {
196
1.24M
            if (yych <= 'Z') {
197
1.22M
              if (yych <= '9') goto yy21;
198
53.9k
              if (yych <= ':') goto yy23;
199
113
              goto yy12;
200
53.9k
            } else {
201
13.1k
              if (yych <= '[') goto yy25;
202
5.51k
              if (yych <= '\\') goto yy12;
203
5.47k
              goto yy27;
204
5.51k
            }
205
1.24M
          }
206
5.69M
        }
207
6.46M
      } else {
208
6.46M
        if (yych <= '}') {
209
6.46M
          if (yych <= 's') {
210
729
            if (yych <= 'f') {
211
439
              if (yych <= 'e') goto yy12;
212
270
              goto yy29;
213
439
            } else {
214
290
              if (yych == 'n') goto yy30;
215
29
              goto yy12;
216
290
            }
217
6.46M
          } else {
218
6.46M
            if (yych <= 'z') {
219
269
              if (yych <= 't') goto yy31;
220
18
              goto yy12;
221
6.46M
            } else {
222
6.46M
              if (yych <= '{') goto yy32;
223
3.23M
              if (yych <= '|') goto yy12;
224
3.23M
              goto yy34;
225
3.23M
            }
226
6.46M
          }
227
6.46M
        } else {
228
480
          if (yych <= 0xEC) {
229
261
            if (yych <= 0xC1) {
230
90
              if (yych <= 0x7F) goto yy12;
231
83
              goto yy36;
232
171
            } else {
233
171
              if (yych <= 0xDF) goto yy38;
234
93
              if (yych <= 0xE0) goto yy39;
235
56
              goto yy40;
236
93
            }
237
261
          } else {
238
219
            if (yych <= 0xF0) {
239
91
              if (yych <= 0xED) goto yy41;
240
59
              if (yych <= 0xEF) goto yy40;
241
50
              goto yy42;
242
128
            } else {
243
128
              if (yych <= 0xF3) goto yy43;
244
72
              if (yych <= 0xF4) goto yy44;
245
39
              goto yy36;
246
72
            }
247
219
          }
248
480
        }
249
6.46M
      }
250
7.05k
      ++YYCURSOR;
251
7.05k
      {
252
7.05k
    if (s->limit < s->cursor) {
253
7.03k
      return PHP_JSON_T_EOI;
254
7.03k
    } else {
255
26
      s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
256
26
      return PHP_JSON_T_ERROR;
257
26
    }
258
7.05k
  }
259
67
yy5:
260
67
      ++YYCURSOR;
261
67
      {
262
67
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
263
67
    return PHP_JSON_T_ERROR;
264
7.05k
  }
265
1.25k
yy7:
266
1.25k
      yych = *++YYCURSOR;
267
1.50k
yy8:
268
1.50k
      if (yybm[0+yych] & 64) {
269
722
        goto yy7;
270
722
      }
271
1.58k
yy9:
272
1.58k
      { goto std; }
273
807
yy10:
274
807
      ++YYCURSOR;
275
807
      goto yy9;
276
436
yy11:
277
436
      yych = *++YYCURSOR;
278
436
      if (yych == '\n') goto yy10;
279
242
      goto yy8;
280
539
yy12:
281
539
      ++YYCURSOR;
282
769
yy13:
283
769
      {
284
769
    s->errcode = PHP_JSON_ERROR_SYNTAX;
285
769
    return PHP_JSON_T_ERROR;
286
539
  }
287
59.9k
yy14:
288
59.9k
      ++YYCURSOR;
289
59.9k
      {
290
59.9k
    s->str_start = s->cursor;
291
59.9k
    s->str_esc = 0;
292
59.9k
    s->utf8_invalid = 0;
293
59.9k
    s->utf8_invalid_count = 0;
294
59.9k
    PHP_JSON_CONDITION_SET_AND_GOTO(STR_P1);
295
539
  }
296
4.42M
yy16:
297
4.42M
      ++YYCURSOR;
298
4.42M
      { return ','; }
299
1.18k
yy18:
300
1.18k
      yych = *++YYCURSOR;
301
1.18k
      if (yych <= '/') goto yy13;
302
1.16k
      if (yych <= '0') goto yy19;
303
832
      if (yych <= '9') goto yy21;
304
23
      goto yy13;
305
30.1k
yy19:
306
30.1k
      yyaccept = 0;
307
30.1k
      yych = *(YYMARKER = ++YYCURSOR);
308
30.1k
      if (yych <= 'D') {
309
26.2k
        if (yych == '.') goto yy45;
310
26.2k
      } else {
311
3.81k
        if (yych <= 'E') goto yy47;
312
3.46k
        if (yych == 'e') goto yy47;
313
3.46k
      }
314
1.18M
yy20:
315
1.18M
      {
316
1.18M
    bool bigint = 0, negative = s->token[0] == '-';
317
1.18M
    size_t digits = (size_t) (s->cursor - s->token - negative);
318
1.18M
    if (digits >= PHP_JSON_INT_MAX_LENGTH) {
319
4.05k
      if (digits == PHP_JSON_INT_MAX_LENGTH) {
320
883
        int cmp = strncmp((char *) (s->token + negative), LONG_MIN_DIGITS, PHP_JSON_INT_MAX_LENGTH);
321
883
        if (!(cmp < 0 || (cmp == 0 && negative))) {
322
445
          bigint = 1;
323
445
        }
324
3.16k
      } else {
325
3.16k
        bigint = 1;
326
3.16k
      }
327
4.05k
    }
328
1.18M
    if (!bigint) {
329
1.18M
      ZVAL_LONG(&s->value, ZEND_STRTOL((char *) s->token, NULL, 10));
330
1.18M
      return PHP_JSON_T_INT;
331
1.18M
    } 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.61k
    } else {
335
3.61k
      ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
336
3.61k
      return PHP_JSON_T_DOUBLE;
337
3.61k
    }
338
1.18M
  }
339
9.82M
yy21:
340
9.82M
      yyaccept = 0;
341
9.82M
      yych = *(YYMARKER = ++YYCURSOR);
342
9.82M
      if (yybm[0+yych] & 128) {
343
8.65M
        goto yy21;
344
8.65M
      }
345
1.17M
      if (yych <= 'D') {
346
1.16M
        if (yych == '.') goto yy45;
347
1.15M
        goto yy20;
348
1.16M
      } else {
349
13.1k
        if (yych <= 'E') goto yy47;
350
11.7k
        if (yych == 'e') goto yy47;
351
2.52k
        goto yy20;
352
11.7k
      }
353
53.8k
yy23:
354
53.8k
      ++YYCURSOR;
355
53.8k
      { return ':'; }
356
7.65k
yy25:
357
7.65k
      ++YYCURSOR;
358
7.65k
      { return '['; }
359
5.47k
yy27:
360
5.47k
      ++YYCURSOR;
361
5.47k
      { return ']'; }
362
270
yy29:
363
270
      yyaccept = 1;
364
270
      yych = *(YYMARKER = ++YYCURSOR);
365
270
      if (yych == 'a') goto yy48;
366
25
      goto yy13;
367
261
yy30:
368
261
      yyaccept = 1;
369
261
      yych = *(YYMARKER = ++YYCURSOR);
370
261
      if (yych == 'u') goto yy49;
371
21
      goto yy13;
372
251
yy31:
373
251
      yyaccept = 1;
374
251
      yych = *(YYMARKER = ++YYCURSOR);
375
251
      if (yych == 'r') goto yy50;
376
9
      goto yy13;
377
3.23M
yy32:
378
3.23M
      ++YYCURSOR;
379
3.23M
      { return '{'; }
380
3.23M
yy34:
381
3.23M
      ++YYCURSOR;
382
3.23M
      { return '}'; }
383
122
yy36:
384
122
      ++YYCURSOR;
385
449
yy37:
386
449
      {
387
449
    s->errcode = PHP_JSON_ERROR_UTF8;
388
449
    return PHP_JSON_T_ERROR;
389
122
  }
390
78
yy38:
391
78
      yych = *++YYCURSOR;
392
78
      if (yych <= 0x7F) goto yy37;
393
36
      if (yych <= 0xBF) goto yy12;
394
19
      goto yy37;
395
37
yy39:
396
37
      yyaccept = 2;
397
37
      yych = *(YYMARKER = ++YYCURSOR);
398
37
      if (yych <= 0x9F) goto yy37;
399
24
      if (yych <= 0xBF) goto yy51;
400
7
      goto yy37;
401
65
yy40:
402
65
      yyaccept = 2;
403
65
      yych = *(YYMARKER = ++YYCURSOR);
404
65
      if (yych <= 0x7F) goto yy37;
405
39
      if (yych <= 0xBF) goto yy51;
406
17
      goto yy37;
407
32
yy41:
408
32
      yyaccept = 2;
409
32
      yych = *(YYMARKER = ++YYCURSOR);
410
32
      if (yych <= 0x7F) goto yy37;
411
29
      if (yych <= 0x9F) goto yy51;
412
17
      goto yy37;
413
50
yy42:
414
50
      yyaccept = 2;
415
50
      yych = *(YYMARKER = ++YYCURSOR);
416
50
      if (yych <= 0x8F) goto yy37;
417
33
      if (yych <= 0xBF) goto yy52;
418
7
      goto yy37;
419
56
yy43:
420
56
      yyaccept = 2;
421
56
      yych = *(YYMARKER = ++YYCURSOR);
422
56
      if (yych <= 0x7F) goto yy37;
423
47
      if (yych <= 0xBF) goto yy52;
424
17
      goto yy37;
425
33
yy44:
426
33
      yyaccept = 2;
427
33
      yych = *(YYMARKER = ++YYCURSOR);
428
33
      if (yych <= 0x7F) goto yy37;
429
30
      if (yych <= 0x8F) goto yy52;
430
15
      goto yy37;
431
9.27k
yy45:
432
9.27k
      yych = *++YYCURSOR;
433
9.27k
      if (yych <= '/') goto yy46;
434
9.25k
      if (yych <= '9') goto yy53;
435
467
yy46:
436
467
      YYCURSOR = YYMARKER;
437
467
      if (yyaccept <= 1) {
438
279
        if (yyaccept == 0) {
439
148
          goto yy20;
440
148
        } else {
441
131
          goto yy13;
442
131
        }
443
279
      } else {
444
188
        if (yyaccept == 2) {
445
115
          goto yy37;
446
115
        } else {
447
73
          goto yy55;
448
73
        }
449
188
      }
450
14.0k
yy47:
451
14.0k
      yych = *++YYCURSOR;
452
14.0k
      if (yych <= ',') {
453
408
        if (yych == '+') goto yy56;
454
100
        goto yy46;
455
13.6k
      } else {
456
13.6k
        if (yych <= '-') goto yy56;
457
7.99k
        if (yych <= '/') goto yy46;
458
7.98k
        if (yych <= '9') goto yy57;
459
34
        goto yy46;
460
7.98k
      }
461
245
yy48:
462
245
      yych = *++YYCURSOR;
463
245
      if (yych == 'l') goto yy59;
464
23
      goto yy46;
465
240
yy49:
466
240
      yych = *++YYCURSOR;
467
240
      if (yych == 'l') goto yy60;
468
21
      goto yy46;
469
242
yy50:
470
242
      yych = *++YYCURSOR;
471
242
      if (yych == 'u') goto yy61;
472
25
      goto yy46;
473
66
yy51:
474
66
      yych = *++YYCURSOR;
475
66
      if (yych <= 0x7F) goto yy46;
476
10
      if (yych <= 0xBF) goto yy12;
477
3
      goto yy46;
478
71
yy52:
479
71
      yych = *++YYCURSOR;
480
71
      if (yych <= 0x7F) goto yy46;
481
26
      if (yych <= 0xBF) goto yy51;
482
11
      goto yy46;
483
58.2M
yy53:
484
58.2M
      yyaccept = 3;
485
58.2M
      yych = *(YYMARKER = ++YYCURSOR);
486
58.2M
      if (yych <= 'D') {
487
58.2M
        if (yych <= '/') goto yy55;
488
58.2M
        if (yych <= '9') goto yy53;
489
58.2M
      } else {
490
2.85k
        if (yych <= 'E') goto yy47;
491
2.53k
        if (yych == 'e') goto yy47;
492
2.53k
      }
493
20.7k
yy55:
494
20.7k
      {
495
20.7k
    ZVAL_DOUBLE(&s->value, zend_strtod((char *) s->token, NULL));
496
20.7k
    return PHP_JSON_T_DOUBLE;
497
58.2M
  }
498
5.97k
yy56:
499
5.97k
      yych = *++YYCURSOR;
500
5.97k
      if (yych <= '/') goto yy46;
501
5.94k
      if (yych >= ':') goto yy46;
502
4.35M
yy57:
503
4.35M
      yych = *++YYCURSOR;
504
4.35M
      if (yych <= '/') goto yy55;
505
4.33M
      if (yych <= '9') goto yy57;
506
262
      goto yy55;
507
262
yy59:
508
222
      yych = *++YYCURSOR;
509
222
      if (yych == 's') goto yy62;
510
15
      goto yy46;
511
219
yy60:
512
219
      yych = *++YYCURSOR;
513
219
      if (yych == 'l') goto yy63;
514
21
      goto yy46;
515
217
yy61:
516
217
      yych = *++YYCURSOR;
517
217
      if (yych == 'e') goto yy65;
518
21
      goto yy46;
519
207
yy62:
520
207
      yych = *++YYCURSOR;
521
207
      if (yych == 'e') goto yy67;
522
5
      goto yy46;
523
198
yy63:
524
198
      ++YYCURSOR;
525
198
      {
526
198
    ZVAL_NULL(&s->value);
527
198
    return PHP_JSON_T_NUL;
528
207
  }
529
196
yy65:
530
196
      ++YYCURSOR;
531
196
      {
532
196
    ZVAL_TRUE(&s->value);
533
196
    return PHP_JSON_T_TRUE;
534
207
  }
535
202
yy67:
536
202
      ++YYCURSOR;
537
202
      {
538
202
    ZVAL_FALSE(&s->value);
539
202
    return PHP_JSON_T_FALSE;
540
207
  }
541
207
    }
542
/* *********************************** */
543
28.5M
yyc_STR_P1:
544
28.5M
    yych = *YYCURSOR;
545
28.5M
    if (yych <= 0xDF) {
546
28.5M
      if (yych <= '[') {
547
23.1M
        if (yych <= 0x1F) goto yy71;
548
23.1M
        if (yych == '"') goto yy75;
549
23.1M
        goto yy73;
550
23.1M
      } else {
551
5.31M
        if (yych <= '\\') goto yy77;
552
5.23M
        if (yych <= 0x7F) goto yy73;
553
304
        if (yych <= 0xC1) goto yy79;
554
274
        goto yy81;
555
304
      }
556
28.5M
    } else {
557
1.67k
      if (yych <= 0xEF) {
558
740
        if (yych <= 0xE0) goto yy82;
559
500
        if (yych == 0xED) goto yy84;
560
262
        goto yy83;
561
937
      } else {
562
937
        if (yych <= 0xF0) goto yy85;
563
561
        if (yych <= 0xF3) goto yy86;
564
262
        if (yych <= 0xF4) goto yy87;
565
9
        goto yy79;
566
262
      }
567
1.67k
    }
568
425
yy71:
569
425
    ++YYCURSOR;
570
425
    {
571
425
    s->errcode = PHP_JSON_ERROR_CTRL_CHAR;
572
425
    return PHP_JSON_T_ERROR;
573
28.5M
  }
574
28.3M
yy73:
575
28.3M
    ++YYCURSOR;
576
28.3M
    { PHP_JSON_CONDITION_GOTO(STR_P1); }
577
57.7k
yy75:
578
57.7k
    ++YYCURSOR;
579
57.7k
    {
580
57.7k
    zend_string *str;
581
57.7k
    size_t len = (size_t)(s->cursor - s->str_start - s->str_esc - 1 + s->utf8_invalid_count);
582
57.7k
    if (len == 0) {
583
20.6k
      PHP_JSON_CONDITION_SET(JS);
584
20.6k
      ZVAL_EMPTY_STRING(&s->value);
585
20.6k
      return PHP_JSON_T_ESTRING;
586
20.6k
    }
587
37.1k
    str = zend_string_alloc(len, 0);
588
37.1k
    ZSTR_VAL(str)[len] = '\0';
589
37.1k
    ZVAL_STR(&s->value, str);
590
37.1k
    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
33.8k
    } else {
595
33.8k
      memcpy(Z_STRVAL(s->value), s->str_start, len);
596
33.8k
      PHP_JSON_CONDITION_SET(JS);
597
33.8k
      return PHP_JSON_T_STRING;
598
33.8k
    }
599
37.1k
  }
600
78.3k
yy77:
601
78.3k
    yyaccept = 0;
602
78.3k
    yych = *(YYMARKER = ++YYCURSOR);
603
78.3k
    if (yych <= 'e') {
604
7.78k
      if (yych <= '/') {
605
6.15k
        if (yych == '"') goto yy88;
606
590
        if (yych >= '/') goto yy88;
607
1.62k
      } else {
608
1.62k
        if (yych <= '\\') {
609
1.14k
          if (yych >= '\\') goto yy88;
610
1.14k
        } else {
611
476
          if (yych == 'b') goto yy88;
612
476
        }
613
1.62k
      }
614
70.5k
    } else {
615
70.5k
      if (yych <= 'q') {
616
1.02k
        if (yych <= 'f') goto yy88;
617
457
        if (yych == 'n') goto yy88;
618
69.5k
      } else {
619
69.5k
        if (yych <= 's') {
620
428
          if (yych <= 'r') goto yy88;
621
69.0k
        } else {
622
69.0k
          if (yych <= 't') goto yy88;
623
60.9k
          if (yych <= 'u') goto yy90;
624
60.9k
        }
625
69.5k
      }
626
70.5k
    }
627
1.08k
yy78:
628
1.08k
    {
629
1.08k
    s->errcode = PHP_JSON_ERROR_SYNTAX;
630
1.08k
    return PHP_JSON_T_ERROR;
631
78.3k
  }
632
39
yy79:
633
39
    ++YYCURSOR;
634
389
yy80:
635
389
    {
636
389
    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
389
    s->errcode = PHP_JSON_ERROR_UTF8;
650
389
    return PHP_JSON_T_ERROR;
651
389
  }
652
274
yy81:
653
274
    yych = *++YYCURSOR;
654
274
    if (yych <= 0x7F) goto yy80;
655
253
    if (yych <= 0xBF) goto yy73;
656
13
    goto yy80;
657
240
yy82:
658
240
    yyaccept = 1;
659
240
    yych = *(YYMARKER = ++YYCURSOR);
660
240
    if (yych <= 0x9F) goto yy80;
661
223
    if (yych <= 0xBF) goto yy92;
662
5
    goto yy80;
663
262
yy83:
664
262
    yyaccept = 1;
665
262
    yych = *(YYMARKER = ++YYCURSOR);
666
262
    if (yych <= 0x7F) goto yy80;
667
247
    if (yych <= 0xBF) goto yy92;
668
13
    goto yy80;
669
238
yy84:
670
238
    yyaccept = 1;
671
238
    yych = *(YYMARKER = ++YYCURSOR);
672
238
    if (yych <= 0x7F) goto yy80;
673
235
    if (yych <= 0x9F) goto yy92;
674
15
    goto yy80;
675
376
yy85:
676
376
    yyaccept = 1;
677
376
    yych = *(YYMARKER = ++YYCURSOR);
678
376
    if (yych <= 0x8F) goto yy80;
679
357
    if (yych <= 0xBF) goto yy93;
680
11
    goto yy80;
681
299
yy86:
682
299
    yyaccept = 1;
683
299
    yych = *(YYMARKER = ++YYCURSOR);
684
299
    if (yych <= 0x7F) goto yy80;
685
294
    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
249
    if (yych <= 0x8F) goto yy93;
692
19
    goto yy80;
693
17.2k
yy88:
694
17.2k
    ++YYCURSOR;
695
17.2k
    {
696
17.2k
    s->str_esc++;
697
17.2k
    PHP_JSON_CONDITION_GOTO(STR_P1);
698
249
  }
699
60.9k
yy90:
700
60.9k
    yych = *++YYCURSOR;
701
60.9k
    if (yych <= 'D') {
702
56.9k
      if (yych <= '9') {
703
54.7k
        if (yych <= '/') goto yy91;
704
54.7k
        if (yych <= '0') goto yy94;
705
5.25k
        goto yy95;
706
54.7k
      } else {
707
2.18k
        if (yych <= '@') goto yy91;
708
2.17k
        if (yych <= 'C') goto yy95;
709
1.83k
        goto yy96;
710
2.17k
      }
711
56.9k
    } else {
712
3.96k
      if (yych <= 'c') {
713
979
        if (yych <= 'F') goto yy95;
714
341
        if (yych >= 'a') goto yy95;
715
2.98k
      } else {
716
2.98k
        if (yych <= 'd') goto yy96;
717
546
        if (yych <= 'f') goto yy95;
718
546
      }
719
3.96k
    }
720
1.38k
yy91:
721
1.38k
    YYCURSOR = YYMARKER;
722
1.38k
    if (yyaccept <= 1) {
723
1.18k
      if (yyaccept == 0) {
724
996
        goto yy78;
725
996
      } else {
726
185
        goto yy80;
727
185
      }
728
1.18k
    } else {
729
203
      goto yy114;
730
203
    }
731
1.45k
yy92:
732
1.45k
    yych = *++YYCURSOR;
733
1.45k
    if (yych <= 0x7F) goto yy91;
734
1.36k
    if (yych <= 0xBF) goto yy73;
735
13
    goto yy91;
736
865
yy93:
737
865
    yych = *++YYCURSOR;
738
865
    if (yych <= 0x7F) goto yy91;
739
795
    if (yych <= 0xBF) goto yy92;
740
15
    goto yy91;
741
49.5k
yy94:
742
49.5k
    yych = *++YYCURSOR;
743
49.5k
    if (yych <= '9') {
744
48.1k
      if (yych <= '/') goto yy91;
745
48.1k
      if (yych <= '0') goto yy97;
746
8.47k
      if (yych <= '7') goto yy98;
747
525
      goto yy99;
748
8.47k
    } else {
749
1.37k
      if (yych <= 'F') {
750
473
        if (yych <= '@') goto yy91;
751
464
        goto yy99;
752
901
      } else {
753
901
        if (yych <= '`') goto yy91;
754
898
        if (yych <= 'f') goto yy99;
755
17
        goto yy91;
756
898
      }
757
1.37k
    }
758
7.08k
yy95:
759
7.08k
    yych = *++YYCURSOR;
760
7.08k
    if (yych <= '@') {
761
1.49k
      if (yych <= '/') goto yy91;
762
1.41k
      if (yych <= '9') goto yy99;
763
7
      goto yy91;
764
5.59k
    } else {
765
5.59k
      if (yych <= 'F') goto yy99;
766
4.88k
      if (yych <= '`') goto yy91;
767
4.87k
      if (yych <= 'f') goto yy99;
768
10
      goto yy91;
769
4.87k
    }
770
4.28k
yy96:
771
4.28k
    yych = *++YYCURSOR;
772
4.28k
    if (yych <= 'B') {
773
2.29k
      if (yych <= '7') {
774
1.03k
        if (yych <= '/') goto yy91;
775
1.00k
        goto yy99;
776
1.26k
      } else {
777
1.26k
        if (yych <= '9') goto yy100;
778
798
        if (yych <= '@') goto yy91;
779
789
        goto yy100;
780
798
      }
781
2.29k
    } else {
782
1.98k
      if (yych <= '`') {
783
116
        if (yych <= 'F') goto yy101;
784
13
        goto yy91;
785
1.87k
      } else {
786
1.87k
        if (yych <= 'b') goto yy100;
787
57
        if (yych <= 'f') goto yy101;
788
19
        goto yy91;
789
57
      }
790
1.98k
    }
791
39.6k
yy97:
792
39.6k
    yych = *++YYCURSOR;
793
39.6k
    if (yych <= '@') {
794
14.7k
      if (yych <= '/') goto yy91;
795
14.7k
      if (yych <= '7') goto yy102;
796
345
      if (yych <= '9') goto yy103;
797
7
      goto yy91;
798
24.8k
    } else {
799
24.8k
      if (yych <= 'F') goto yy103;
800
539
      if (yych <= '`') goto yy91;
801
534
      if (yych <= 'f') goto yy103;
802
17
      goto yy91;
803
534
    }
804
7.95k
yy98:
805
7.95k
    yych = *++YYCURSOR;
806
7.95k
    if (yych <= '@') {
807
785
      if (yych <= '/') goto yy91;
808
768
      if (yych <= '9') goto yy103;
809
9
      goto yy91;
810
7.16k
    } else {
811
7.16k
      if (yych <= 'F') goto yy103;
812
708
      if (yych <= '`') goto yy91;
813
699
      if (yych <= 'f') goto yy103;
814
17
      goto yy91;
815
699
    }
816
9.86k
yy99:
817
9.86k
    yych = *++YYCURSOR;
818
9.86k
    if (yych <= '@') {
819
7.23k
      if (yych <= '/') goto yy91;
820
7.11k
      if (yych <= '9') goto yy104;
821
9
      goto yy91;
822
7.11k
    } else {
823
2.63k
      if (yych <= 'F') goto yy104;
824
751
      if (yych <= '`') goto yy91;
825
738
      if (yych <= 'f') goto yy104;
826
17
      goto yy91;
827
738
    }
828
3.06k
yy100:
829
3.06k
    yych = *++YYCURSOR;
830
3.06k
    if (yych <= '@') {
831
706
      if (yych <= '/') goto yy91;
832
666
      if (yych <= '9') goto yy105;
833
7
      goto yy91;
834
2.36k
    } else {
835
2.36k
      if (yych <= 'F') goto yy105;
836
1.16k
      if (yych <= '`') goto yy91;
837
1.15k
      if (yych <= 'f') goto yy105;
838
15
      goto yy91;
839
1.15k
    }
840
141
yy101:
841
141
    yych = *++YYCURSOR;
842
141
    if (yych <= '@') {
843
59
      if (yych <= '/') goto yy91;
844
33
      if (yych <= '9') goto yy106;
845
7
      goto yy91;
846
82
    } else {
847
82
      if (yych <= 'F') goto yy106;
848
49
      if (yych <= '`') goto yy91;
849
36
      if (yych <= 'f') goto yy106;
850
13
      goto yy91;
851
36
    }
852
14.4k
yy102:
853
14.4k
    yych = *++YYCURSOR;
854
14.4k
    if (yych <= '@') {
855
3.47k
      if (yych <= '/') goto yy91;
856
3.45k
      if (yych <= '9') goto yy107;
857
7
      goto yy91;
858
10.9k
    } else {
859
10.9k
      if (yych <= 'F') goto yy107;
860
7.35k
      if (yych <= '`') goto yy91;
861
7.35k
      if (yych <= 'f') goto yy107;
862
3
      goto yy91;
863
7.35k
    }
864
33.0k
yy103:
865
33.0k
    yych = *++YYCURSOR;
866
33.0k
    if (yych <= '@') {
867
1.52k
      if (yych <= '/') goto yy91;
868
1.44k
      if (yych <= '9') goto yy109;
869
7
      goto yy91;
870
31.5k
    } else {
871
31.5k
      if (yych <= 'F') goto yy109;
872
1.15k
      if (yych <= '`') goto yy91;
873
1.15k
      if (yych <= 'f') goto yy109;
874
13
      goto yy91;
875
1.15k
    }
876
9.71k
yy104:
877
9.71k
    yych = *++YYCURSOR;
878
9.71k
    if (yych <= '@') {
879
7.08k
      if (yych <= '/') goto yy91;
880
7.02k
      if (yych <= '9') goto yy111;
881
7
      goto yy91;
882
7.02k
    } else {
883
2.62k
      if (yych <= 'F') goto yy111;
884
778
      if (yych <= '`') goto yy91;
885
769
      if (yych <= 'f') goto yy111;
886
15
      goto yy91;
887
769
    }
888
2.99k
yy105:
889
2.99k
    yych = *++YYCURSOR;
890
2.99k
    if (yych <= '@') {
891
538
      if (yych <= '/') goto yy91;
892
492
      if (yych <= '9') goto yy113;
893
3
      goto yy91;
894
2.45k
    } else {
895
2.45k
      if (yych <= 'F') goto yy113;
896
740
      if (yych <= '`') goto yy91;
897
735
      if (yych <= 'f') goto yy113;
898
7
      goto yy91;
899
735
    }
900
82
yy106:
901
82
    yych = *++YYCURSOR;
902
82
    if (yych <= '@') {
903
42
      if (yych <= '/') goto yy91;
904
18
      if (yych <= '9') goto yy115;
905
9
      goto yy91;
906
40
    } else {
907
40
      if (yych <= 'F') goto yy115;
908
33
      if (yych <= '`') goto yy91;
909
24
      if (yych <= 'f') goto yy115;
910
17
      goto yy91;
911
24
    }
912
14.3k
yy107:
913
14.3k
    ++YYCURSOR;
914
14.3k
    {
915
14.3k
    s->str_esc += 5;
916
14.3k
    PHP_JSON_CONDITION_GOTO(STR_P1);
917
82
  }
918
32.9k
yy109:
919
32.9k
    ++YYCURSOR;
920
32.9k
    {
921
32.9k
    s->str_esc += 4;
922
32.9k
    PHP_JSON_CONDITION_GOTO(STR_P1);
923
82
  }
924
9.61k
yy111:
925
9.61k
    ++YYCURSOR;
926
9.61k
    {
927
9.61k
    s->str_esc += 3;
928
9.61k
    PHP_JSON_CONDITION_GOTO(STR_P1);
929
82
  }
930
2.93k
yy113:
931
2.93k
    yyaccept = 2;
932
2.93k
    yych = *(YYMARKER = ++YYCURSOR);
933
2.93k
    if (yych == '\\') goto yy116;
934
282
yy114:
935
282
    {
936
282
    s->errcode = PHP_JSON_ERROR_UTF16;
937
282
    return PHP_JSON_T_ERROR;
938
2.93k
  }
939
23
yy115:
940
23
    ++YYCURSOR;
941
23
    goto yy114;
942
2.87k
yy116:
943
2.87k
    yych = *++YYCURSOR;
944
2.87k
    if (yych != 'u') goto yy91;
945
2.85k
    yych = *++YYCURSOR;
946
2.85k
    if (yych == 'D') goto yy118;
947
815
    if (yych != 'd') goto yy91;
948
2.84k
yy118:
949
2.84k
    yych = *++YYCURSOR;
950
2.84k
    if (yych <= 'B') goto yy91;
951
2.81k
    if (yych <= 'F') goto yy119;
952
1.27k
    if (yych <= 'b') goto yy91;
953
1.26k
    if (yych >= 'g') goto yy91;
954
2.78k
yy119:
955
2.78k
    yych = *++YYCURSOR;
956
2.78k
    if (yych <= '@') {
957
689
      if (yych <= '/') goto yy91;
958
665
      if (yych >= ':') goto yy91;
959
2.09k
    } else {
960
2.09k
      if (yych <= 'F') goto yy120;
961
1.03k
      if (yych <= '`') goto yy91;
962
1.01k
      if (yych >= 'g') goto yy91;
963
1.01k
    }
964
2.73k
yy120:
965
2.73k
    yych = *++YYCURSOR;
966
2.73k
    if (yych <= '@') {
967
708
      if (yych <= '/') goto yy91;
968
657
      if (yych >= ':') goto yy91;
969
2.02k
    } else {
970
2.02k
      if (yych <= 'F') goto yy121;
971
929
      if (yych <= '`') goto yy91;
972
926
      if (yych >= 'g') goto yy91;
973
926
    }
974
2.67k
yy121:
975
2.67k
    ++YYCURSOR;
976
2.67k
    {
977
2.67k
    s->str_esc += 8;
978
2.67k
    PHP_JSON_CONDITION_GOTO(STR_P1);
979
2.73k
  }
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
21.3M
yyc_STR_P2_UTF:
1365
21.3M
    yych = *YYCURSOR;
1366
21.3M
    if (yych == '"') goto yy173;
1367
21.3M
    if (yych == '\\') goto yy175;
1368
21.3M
    ++YYCURSOR;
1369
21.3M
    { 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
21.3M
  }
1377
72.4k
yy175:
1378
72.4k
    yych = *(YYMARKER = ++YYCURSOR);
1379
72.4k
    if (yych == 'u') goto yy177;
1380
16.1k
yy176:
1381
16.1k
    {
1382
16.1k
    unsigned char esc;
1383
16.1k
    PHP_JSON_SCANNER_COPY_ESC();
1384
16.1k
    switch (*s->cursor) {
1385
272
      case 'b':
1386
272
        esc = '\b';
1387
272
        break;
1388
501
      case 'f':
1389
501
        esc = '\f';       break;
1390
382
      case 'n':
1391
382
        esc = '\n';
1392
382
        break;
1393
233
      case 'r':
1394
233
        esc = '\r';
1395
233
        break;
1396
7.93k
      case 't':
1397
7.93k
        esc = '\t';
1398
7.93k
        break;
1399
938
      case '\\':
1400
1.44k
      case '/':
1401
6.81k
      case '"':
1402
6.81k
        esc = *s->cursor;
1403
6.81k
        break;
1404
0
      default:
1405
0
        s->errcode = PHP_JSON_ERROR_SYNTAX;
1406
0
        return PHP_JSON_T_ERROR;
1407
16.1k
    }
1408
16.1k
    *(s->pstr++) = esc;
1409
16.1k
    ++YYCURSOR;
1410
16.1k
    s->str_start = s->cursor;
1411
16.1k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1412
16.1k
  }
1413
56.2k
yy177:
1414
56.2k
    yych = *++YYCURSOR;
1415
56.2k
    if (yych <= 'D') {
1416
54.4k
      if (yych <= '9') {
1417
53.1k
        if (yych <= '/') goto yy178;
1418
53.1k
        if (yych <= '0') goto yy179;
1419
5.07k
        goto yy180;
1420
53.1k
      } else {
1421
1.36k
        if (yych <= '@') goto yy178;
1422
1.36k
        if (yych <= 'C') goto yy180;
1423
1.12k
        goto yy181;
1424
1.36k
      }
1425
54.4k
    } else {
1426
1.81k
      if (yych <= 'c') {
1427
444
        if (yych <= 'F') goto yy180;
1428
220
        if (yych >= 'a') goto yy180;
1429
1.37k
      } else {
1430
1.37k
        if (yych <= 'd') goto yy181;
1431
270
        if (yych <= 'f') goto yy180;
1432
270
      }
1433
1.81k
    }
1434
0
yy178:
1435
0
    YYCURSOR = YYMARKER;
1436
0
    goto yy176;
1437
48.0k
yy179:
1438
48.0k
    yych = *++YYCURSOR;
1439
48.0k
    if (yych <= '9') {
1440
46.9k
      if (yych <= '/') goto yy178;
1441
46.9k
      if (yych <= '0') goto yy182;
1442
7.83k
      if (yych <= '7') goto yy183;
1443
290
      goto yy184;
1444
7.83k
    } else {
1445
1.04k
      if (yych <= 'F') {
1446
237
        if (yych <= '@') goto yy178;
1447
237
        goto yy184;
1448
812
      } else {
1449
812
        if (yych <= '`') goto yy178;
1450
812
        if (yych <= 'f') goto yy184;
1451
0
        goto yy178;
1452
812
      }
1453
1.04k
    }
1454
6.02k
yy180:
1455
6.02k
    yych = *++YYCURSOR;
1456
6.02k
    if (yych <= '@') {
1457
1.17k
      if (yych <= '/') goto yy178;
1458
1.17k
      if (yych <= '9') goto yy184;
1459
0
      goto yy178;
1460
4.85k
    } else {
1461
4.85k
      if (yych <= 'F') goto yy184;
1462
4.55k
      if (yych <= '`') goto yy178;
1463
4.55k
      if (yych <= 'f') goto yy184;
1464
0
      goto yy178;
1465
4.55k
    }
1466
2.22k
yy181:
1467
2.22k
    yych = *++YYCURSOR;
1468
2.22k
    if (yych <= '@') {
1469
958
      if (yych <= '/') goto yy178;
1470
958
      if (yych <= '7') goto yy184;
1471
272
      if (yych <= '9') goto yy185;
1472
0
      goto yy178;
1473
1.26k
    } else {
1474
1.26k
      if (yych <= 'B') goto yy185;
1475
766
      if (yych <= '`') goto yy178;
1476
766
      if (yych <= 'b') goto yy185;
1477
0
      goto yy178;
1478
766
    }
1479
39.1k
yy182:
1480
39.1k
    yych = *++YYCURSOR;
1481
39.1k
    if (yych <= '@') {
1482
14.4k
      if (yych <= '/') goto yy178;
1483
14.4k
      if (yych <= '7') goto yy186;
1484
261
      if (yych <= '9') goto yy187;
1485
0
      goto yy178;
1486
24.6k
    } else {
1487
24.6k
      if (yych <= 'F') goto yy187;
1488
439
      if (yych <= '`') goto yy178;
1489
439
      if (yych <= 'f') goto yy187;
1490
0
      goto yy178;
1491
439
    }
1492
7.54k
yy183:
1493
7.54k
    yych = *++YYCURSOR;
1494
7.54k
    if (yych <= '@') {
1495
594
      if (yych <= '/') goto yy178;
1496
594
      if (yych <= '9') goto yy187;
1497
0
      goto yy178;
1498
6.94k
    } else {
1499
6.94k
      if (yych <= 'F') goto yy187;
1500
605
      if (yych <= '`') goto yy178;
1501
605
      if (yych <= 'f') goto yy187;
1502
0
      goto yy178;
1503
605
    }
1504
8.05k
yy184:
1505
8.05k
    yych = *++YYCURSOR;
1506
8.05k
    if (yych <= '@') {
1507
6.41k
      if (yych <= '/') goto yy178;
1508
6.41k
      if (yych <= '9') goto yy188;
1509
0
      goto yy178;
1510
6.41k
    } else {
1511
1.64k
      if (yych <= 'F') goto yy188;
1512
428
      if (yych <= '`') goto yy178;
1513
428
      if (yych <= 'f') goto yy188;
1514
0
      goto yy178;
1515
428
    }
1516
1.54k
yy185:
1517
1.54k
    yych = *++YYCURSOR;
1518
1.54k
    if (yych <= '@') {
1519
456
      if (yych <= '/') goto yy178;
1520
456
      if (yych <= '9') goto yy189;
1521
0
      goto yy178;
1522
1.08k
    } else {
1523
1.08k
      if (yych <= 'F') goto yy189;
1524
502
      if (yych <= '`') goto yy178;
1525
502
      if (yych <= 'f') goto yy189;
1526
0
      goto yy178;
1527
502
    }
1528
14.2k
yy186:
1529
14.2k
    yych = *++YYCURSOR;
1530
14.2k
    if (yych <= '@') {
1531
3.38k
      if (yych <= '/') goto yy178;
1532
3.38k
      if (yych <= '9') goto yy190;
1533
0
      goto yy178;
1534
10.8k
    } else {
1535
10.8k
      if (yych <= 'F') goto yy190;
1536
7.29k
      if (yych <= '`') goto yy178;
1537
7.29k
      if (yych <= 'f') goto yy190;
1538
0
      goto yy178;
1539
7.29k
    }
1540
32.4k
yy187:
1541
32.4k
    yych = *++YYCURSOR;
1542
32.4k
    if (yych <= '@') {
1543
1.22k
      if (yych <= '/') goto yy178;
1544
1.22k
      if (yych <= '9') goto yy192;
1545
0
      goto yy178;
1546
31.2k
    } else {
1547
31.2k
      if (yych <= 'F') goto yy192;
1548
985
      if (yych <= '`') goto yy178;
1549
985
      if (yych <= 'f') goto yy192;
1550
0
      goto yy178;
1551
985
    }
1552
8.05k
yy188:
1553
8.05k
    yych = *++YYCURSOR;
1554
8.05k
    if (yych <= '@') {
1555
6.32k
      if (yych <= '/') goto yy178;
1556
6.32k
      if (yych <= '9') goto yy194;
1557
0
      goto yy178;
1558
6.32k
    } else {
1559
1.73k
      if (yych <= 'F') goto yy194;
1560
466
      if (yych <= '`') goto yy178;
1561
466
      if (yych <= 'f') goto yy194;
1562
0
      goto yy178;
1563
466
    }
1564
1.54k
yy189:
1565
1.54k
    yych = *++YYCURSOR;
1566
1.54k
    if (yych <= '@') {
1567
309
      if (yych <= '/') goto yy178;
1568
309
      if (yych <= '9') goto yy196;
1569
0
      goto yy178;
1570
1.23k
    } else {
1571
1.23k
      if (yych <= 'F') goto yy196;
1572
278
      if (yych <= '`') goto yy178;
1573
278
      if (yych <= 'f') goto yy196;
1574
0
      goto yy178;
1575
278
    }
1576
14.2k
yy190:
1577
14.2k
    ++YYCURSOR;
1578
14.2k
    {
1579
14.2k
    int utf16 = php_json_ucs2_to_int(s, 2);
1580
14.2k
    PHP_JSON_SCANNER_COPY_UTF();
1581
14.2k
    *(s->pstr++) = (unsigned char) utf16;
1582
14.2k
    s->str_start = s->cursor;
1583
14.2k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1584
14.2k
  }
1585
32.4k
yy192:
1586
32.4k
    ++YYCURSOR;
1587
32.4k
    {
1588
32.4k
    int utf16 = php_json_ucs2_to_int(s, 3);
1589
32.4k
    PHP_JSON_SCANNER_COPY_UTF();
1590
32.4k
    *(s->pstr++) = (unsigned char) (0xc0 | (utf16 >> 6));
1591
32.4k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1592
32.4k
    s->str_start = s->cursor;
1593
32.4k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1594
32.4k
  }
1595
8.05k
yy194:
1596
8.05k
    ++YYCURSOR;
1597
8.05k
    {
1598
8.05k
    int utf16 = php_json_ucs2_to_int(s, 4);
1599
8.05k
    PHP_JSON_SCANNER_COPY_UTF();
1600
8.05k
    *(s->pstr++) = (unsigned char) (0xe0 | (utf16 >> 12));
1601
8.05k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf16 >> 6) & 0x3f));
1602
8.05k
    *(s->pstr++) = (unsigned char) (0x80 | (utf16 & 0x3f));
1603
8.05k
    s->str_start = s->cursor;
1604
8.05k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1605
8.05k
  }
1606
1.54k
yy196:
1607
1.54k
    yych = *++YYCURSOR;
1608
1.54k
    if (yych != '\\') goto yy178;
1609
1.54k
    yych = *++YYCURSOR;
1610
1.54k
    if (yych != 'u') goto yy178;
1611
1.54k
    yych = *++YYCURSOR;
1612
1.54k
    if (yych == 'D') goto yy199;
1613
340
    if (yych != 'd') goto yy178;
1614
1.54k
yy199:
1615
1.54k
    yych = *++YYCURSOR;
1616
1.54k
    if (yych <= 'B') goto yy178;
1617
1.54k
    if (yych <= 'F') goto yy200;
1618
637
    if (yych <= 'b') goto yy178;
1619
637
    if (yych >= 'g') goto yy178;
1620
1.54k
yy200:
1621
1.54k
    yych = *++YYCURSOR;
1622
1.54k
    if (yych <= '@') {
1623
440
      if (yych <= '/') goto yy178;
1624
440
      if (yych >= ':') goto yy178;
1625
1.10k
    } else {
1626
1.10k
      if (yych <= 'F') goto yy201;
1627
520
      if (yych <= '`') goto yy178;
1628
520
      if (yych >= 'g') goto yy178;
1629
520
    }
1630
1.54k
yy201:
1631
1.54k
    yych = *++YYCURSOR;
1632
1.54k
    if (yych <= '@') {
1633
429
      if (yych <= '/') goto yy178;
1634
429
      if (yych >= ':') goto yy178;
1635
1.11k
    } else {
1636
1.11k
      if (yych <= 'F') goto yy202;
1637
490
      if (yych <= '`') goto yy178;
1638
490
      if (yych >= 'g') goto yy178;
1639
490
    }
1640
1.54k
yy202:
1641
1.54k
    ++YYCURSOR;
1642
1.54k
    {
1643
1.54k
    int utf32, utf16_hi, utf16_lo;
1644
1.54k
    utf16_hi = php_json_ucs2_to_int(s, 4);
1645
1.54k
    utf16_lo = php_json_ucs2_to_int_ex(s, 4, 7);
1646
1.54k
    utf32 = ((utf16_lo & 0x3FF) << 10) + (utf16_hi & 0x3FF) + 0x10000;
1647
1.54k
    PHP_JSON_SCANNER_COPY_UTF_SP();
1648
1.54k
    *(s->pstr++) = (unsigned char) (0xf0 | (utf32 >> 18));
1649
1.54k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 12) & 0x3f));
1650
1.54k
    *(s->pstr++) = (unsigned char) (0x80 | ((utf32 >> 6) & 0x3f));
1651
1.54k
    *(s->pstr++) = (unsigned char) (0x80 | (utf32 & 0x3f));
1652
1.54k
    s->str_start = s->cursor;
1653
1.54k
    PHP_JSON_CONDITION_GOTO_STR_P2();
1654
1.54k
  }
1655
1.54k
  }
1656
1657
1658
1.54k
}