28static const char rot13_from[] =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
29static const char rot13_to[] =
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM";
36 size_t *bytes_consumed,
43 while (buckets_in->
head) {
47 consumed += bucket->
buflen;
53 *bytes_consumed = consumed;
60 strfilter_rot13_filter,
71 strfilter_rot13_create
76static const char lowercase[] =
"abcdefghijklmnopqrstuvwxyz";
77static const char uppercase[] =
"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
84 size_t *bytes_consumed,
91 while (buckets_in->
head) {
95 consumed += bucket->
buflen;
100 if (bytes_consumed) {
101 *bytes_consumed = consumed;
112 size_t *bytes_consumed,
119 while (buckets_in->
head) {
123 consumed += bucket->
buflen;
128 if (bytes_consumed) {
129 *bytes_consumed = consumed;
136 strfilter_toupper_filter,
142 strfilter_tolower_filter,
158 strfilter_toupper_create
162 strfilter_tolower_create
190#define php_conv_convert(a, b, c, d, e) ((php_conv *)(a))->convert_op((php_conv *)(a), (b), (c), (d), (e))
191#define php_conv_dtor(a) ((php_conv *)a)->dtor((a))
210static const unsigned char b64_tbl_enc[256] = {
211 'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
212 'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
'e',
'f',
213 'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
214 'w',
'x',
'y',
'z',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'+',
'/',
215 'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
216 'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
'e',
'f',
217 'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
218 'w',
'x',
'y',
'z',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'+',
'/',
219 'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
220 'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
'e',
'f',
221 'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
222 'w',
'x',
'y',
'z',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'+',
'/',
223 'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
224 'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z',
'a',
'b',
'c',
'd',
'e',
'f',
225 'g',
'h',
'i',
'j',
'k',
'l',
'm',
'n',
'o',
'p',
'q',
'r',
's',
't',
'u',
'v',
226 'w',
'x',
'y',
'z',
'0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'+',
'/'
236 if (lbchars !=
NULL) {
260 unsigned int line_ccnt;
262 pd = (
unsigned char *)(*out_pp);
272 if (line_ccnt < 4 && inst->lbchars !=
NULL) {
273 if (ocnt < inst->lbchars_len) {
285 *(pd++) = b64_tbl_enc[(inst->
erem[0] >> 2)];
286 *(pd++) = b64_tbl_enc[(
unsigned char)(inst->
erem[0] << 4)];
295 if (line_ccnt < 4 && inst->lbchars !=
NULL) {
296 if (ocnt < inst->lbchars_len) {
307 *(pd++) = b64_tbl_enc[(inst->
erem[0] >> 2)];
308 *(pd++) = b64_tbl_enc[(
unsigned char)(inst->
erem[0] << 4) | (inst->
erem[1] >> 4)];
309 *(pd++) = b64_tbl_enc[(
unsigned char)(inst->
erem[1] << 2)];
322 *out_pp = (
char *)pd;
332 unsigned char *ps, *pd;
333 unsigned int line_ccnt;
335 if (in_pp ==
NULL || in_left_p ==
NULL) {
336 return php_conv_base64_encode_flush(inst, in_pp, in_left_p, out_pp, out_left_p);
339 pd = (
unsigned char *)(*out_pp);
341 ps = (
unsigned char *)(*in_pp);
349 if (line_ccnt < 4 && inst->lbchars !=
NULL) {
350 if (ocnt < inst->lbchars_len) {
361 *(pd++) = b64_tbl_enc[(inst->
erem[0] >> 2)];
362 *(pd++) = b64_tbl_enc[(
unsigned char)(inst->
erem[0] << 4) | (ps[0] >> 4)];
363 *(pd++) = b64_tbl_enc[(
unsigned char)(ps[0] << 2) | (ps[1] >> 6)];
364 *(pd++) = b64_tbl_enc[ps[1]];
376 if (ocnt < inst->lbchars_len) {
387 *(pd++) = b64_tbl_enc[(inst->
erem[0] >> 2)];
388 *(pd++) = b64_tbl_enc[(
unsigned char)(inst->
erem[0] << 4) | (inst->
erem[1] >> 4)];
389 *(pd++) = b64_tbl_enc[(
unsigned char)(inst->
erem[1] << 2) | (ps[0] >> 6)];
390 *(pd++) = b64_tbl_enc[ps[0]];
401 if (line_ccnt < 4 && inst->lbchars !=
NULL) {
402 if (ocnt < inst->lbchars_len) {
414 *(pd++) = b64_tbl_enc[ps[0] >> 2];
415 *(pd++) = b64_tbl_enc[(
unsigned char)(ps[0] << 4) | (ps[1] >> 4)];
416 *(pd++) = b64_tbl_enc[(
unsigned char)(ps[1] << 2) | (ps[2] >> 6)];
417 *(pd++) = b64_tbl_enc[ps[2]];
424 for (;icnt > 0; icnt--) {
429 *in_pp = (
const char *)ps;
431 *out_pp = (
char *)pd;
453static unsigned int b64_tbl_dec[256] = {
454 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
455 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
456 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 62, 64, 64, 64, 63,
457 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 64, 64, 64,128, 64, 64,
458 64, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
459 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 64, 64, 64, 64, 64,
460 64, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
461 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 64, 64, 64, 64, 64,
462 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
463 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
464 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
465 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
466 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
467 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
468 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64,
469 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64
488#define bmask(a) (0xffff >> (16 - a))
493 unsigned int urem, urem_nbits;
494 unsigned int pack, pack_bcnt;
495 unsigned char *ps, *pd;
499 static const unsigned int nbitsof_pack = 8;
501 if (in_pp ==
NULL || in_left_p ==
NULL) {
510 ps = (
unsigned char *)*in_pp;
511 pd = (
unsigned char *)*out_pp;
520 pack_bcnt = nbitsof_pack;
523 if (pack_bcnt >= urem_nbits) {
524 pack_bcnt -= urem_nbits;
525 pack |= (urem << pack_bcnt);
528 urem_nbits -= pack_bcnt;
529 pack |= (urem >> urem_nbits);
530 urem &=
bmask(urem_nbits);
540 i = b64_tbl_dec[(
unsigned int)*(ps++)];
549 if (6 <= pack_bcnt) {
551 pack |= (i << pack_bcnt);
554 urem_nbits = 6 - pack_bcnt;
555 pack |= (i >> urem_nbits);
556 urem = i &
bmask(urem_nbits);
560 if (pack_bcnt == 8 || pack_bcnt == 2) {
567 if ((pack_bcnt | ustat) == 0) {
575 pack_bcnt = nbitsof_pack;
579 if (urem_nbits >= pack_bcnt) {
580 urem |= (
pack << (urem_nbits - pack_bcnt));
581 urem_nbits += (nbitsof_pack - pack_bcnt);
583 urem |= (
pack >> (pack_bcnt - urem_nbits));
584 urem_nbits += (nbitsof_pack - pack_bcnt);
591 *in_pp = (
const char *)ps;
593 *out_pp = (
char *)pd;
616#define PHP_CONV_QPRINT_OPT_BINARY 0x00000001
617#define PHP_CONV_QPRINT_OPT_FORCE_ENCODE_FIRST 0x00000002
630#define NEXT_CHAR(ps, icnt, lb_ptr, lb_cnt, lbchars) \
631 ((lb_ptr) < (lb_cnt) ? (lbchars)[(lb_ptr)] : *(ps))
633#define CONSUME_CHAR(ps, icnt, lb_ptr, lb_cnt) \
634 if ((lb_ptr) < (lb_cnt)) { \
637 (lb_cnt) = (lb_ptr) = 0; \
645 unsigned char *ps, *pd;
648 unsigned int line_ccnt;
651 unsigned int trail_ws;
653 static const char qp_digits[] =
"0123456789ABCDEF";
660 if (in_pp ==
NULL || in_left_p ==
NULL) {
664 ps = (
unsigned char *)(*in_pp);
666 pd = (
unsigned char *)(*out_pp);
675 if (icnt > 0 && *ps == inst->
lbchars[lb_cnt]) {
687 for (i = 0; i < lb_cnt; i++) {
699 if (lb_ptr >= lb_cnt && icnt == 0) {
707 (c ==
'\t' || c ==
' ')) {
708 if (line_ccnt < 2 && inst->lbchars !=
NULL) {
709 if (ocnt < inst->lbchars_len + 1) {
730 unsigned int lb_cnt2;
737 for (
j = icnt - 1;
j > 0;
j--, ps2++) {
738 if (*ps2 == inst->
lbchars[lb_cnt2]) {
746 }
else if (lb_cnt2 != 0 || (*ps2 !=
'\t' && *ps2 !=
' ')) {
765 if (line_ccnt < 2 && inst->lbchars !=
NULL) {
766 if (ocnt < inst->lbchars_len + 1) {
787 if (line_ccnt < 4 && inst->lbchars !=
NULL) {
788 if (ocnt < inst->lbchars_len + 1) {
805 *(pd++) = qp_digits[(c >> 4)];
806 *(pd++) = qp_digits[(c & 0x0f)];
816 *in_pp = (
const char *)ps;
818 *out_pp = (
char *)pd;
830 if (line_len < 4 && lbchars !=
NULL) {
837 if (lbchars !=
NULL) {
877 unsigned char *ps, *pd;
878 unsigned int scan_stat;
879 unsigned int next_char;
880 unsigned int lb_ptr, lb_cnt;
885 if (in_pp ==
NULL || in_left_p ==
NULL) {
892 ps = (
unsigned char *)(*in_pp);
894 pd = (
unsigned char *)(*out_pp);
922 if (*ps ==
' ' || *ps ==
'\t') {
926 }
else if (!inst->
lbchars && lb_cnt == 0 && *ps ==
'\r') {
932 }
else if (!inst->
lbchars && lb_cnt == 0 && *ps ==
'\n') {
938 }
else if (lb_cnt < inst->lbchars_len &&
939 *ps == (
unsigned char)inst->
lbchars[lb_cnt]) {
952 if (!isxdigit((
int) *ps)) {
956 next_char = (next_char << 4) | (*ps >=
'A' ? *ps - 0x37 : *ps - 0x30);
959 if (scan_stat != 3) {
978 if (lb_cnt < inst->lbchars_len &&
979 *ps == (
unsigned char)inst->
lbchars[lb_cnt]) {
982 }
else if (*ps !=
'\t' && *ps !=
' ') {
993 if (!inst->
lbchars && lb_cnt == 1 && *ps ==
'\n') {
998 }
else if (!inst->
lbchars && lb_cnt > 0) {
1000 lb_cnt = lb_ptr = 0;
1004 lb_cnt = lb_ptr = 0;
1007 if (*ps == (
unsigned char)inst->
lbchars[lb_cnt]) {
1017 if (lb_ptr < lb_cnt) {
1022 *(pd++) = inst->
lbchars[lb_ptr++];
1026 lb_cnt = lb_ptr = 0;
1032 *in_pp = (
const char *)ps;
1034 *out_pp = (
char *)pd;
1050 if (lbchars !=
NULL) {
1071#define PHP_CONV_BASE64_ENCODE 1
1072#define PHP_CONV_BASE64_DECODE 2
1073#define PHP_CONV_QPRINT_ENCODE 3
1074#define PHP_CONV_QPRINT_DECODE 4
1085 zend_string *str = zval_get_tmp_string(tmpval, &tmp);
1090 zend_tmp_string_release(tmp);
1100 if (tmpval !=
NULL) {
1115static php_conv_err_t php_conv_get_bool_prop_ex(
const HashTable *
ht,
bool *pretval,
char *field_name,
size_t field_name_len)
1118 if (tmpval !=
NULL) {
1128static php_conv_err_t php_conv_get_uint_prop_ex(
const HashTable *
ht,
unsigned int *pretval,
char *field_name,
size_t field_name_len)
1136 *pretval = (
unsigned int)l;
1141#define GET_STR_PROP(ht, var, var_len, fldname, persistent) \
1142 php_conv_get_string_prop_ex(ht, &var, &var_len, fldname, sizeof(fldname), persistent)
1144#define GET_INT_PROP(ht, var, fldname) \
1145 php_conv_get_int_prop_ex(ht, &var, fldname, sizeof(fldname))
1147#define GET_UINT_PROP(ht, var, fldname) \
1148 php_conv_get_uint_prop_ex(ht, &var, fldname, sizeof(fldname))
1150#define GET_BOOL_PROP(ht, var, fldname) \
1151 php_conv_get_bool_prop_ex(ht, &var, fldname, sizeof(fldname))
1159 switch (conv_mode) {
1161 unsigned int line_len = 0;
1162 char *lbchars =
NULL;
1169 if (lbchars !=
NULL) {
1174 if (lbchars ==
NULL) {
1181 if (lbchars !=
NULL) {
1200 unsigned int line_len = 0;
1201 char *lbchars =
NULL;
1206 bool opt_binary =
false;
1207 bool opt_force_encode_first =
false;
1215 if (lbchars !=
NULL) {
1220 if (lbchars ==
NULL) {
1229 if (lbchars !=
NULL) {
1243 char *lbchars =
NULL;
1252 if (lbchars !=
NULL) {
1291 if ((inst->
cd = php_conv_open(conv_mode, conv_opts,
persistent)) ==
NULL) {
1314static zend_result strfilter_convert_append_bucket(
1318 const char *ps,
size_t buf_len,
size_t *consumed,
1323 char *out_buf =
NULL;
1324 size_t out_buf_size;
1327 size_t ocnt, icnt, tcnt;
1328 size_t initial_out_buf_size;
1331 initial_out_buf_size = 64;
1334 initial_out_buf_size = buf_len;
1338 out_buf_size = ocnt = initial_out_buf_size;
1379 size_t new_out_buf_size;
1381 new_out_buf_size = out_buf_size << 1;
1383 if (new_out_buf_size < out_buf_size) {
1391 out_buf_size = ocnt = initial_out_buf_size;
1396 pd = new_out_buf + (pd - out_buf);
1397 ocnt += (new_out_buf_size - out_buf_size);
1398 out_buf = new_out_buf;
1399 out_buf_size = new_out_buf_size;
1425 if (icnt >
sizeof(inst->
stub)) {
1441 size_t new_out_buf_size;
1443 new_out_buf_size = out_buf_size << 1;
1445 if (new_out_buf_size < out_buf_size) {
1453 out_buf_size = ocnt = initial_out_buf_size;
1458 pd = new_out_buf + (pd - out_buf);
1459 ocnt += (new_out_buf_size - out_buf_size);
1460 out_buf = new_out_buf;
1461 out_buf_size = new_out_buf_size;
1477 if (out_buf_size > ocnt) {
1485 *consumed += buf_len - icnt;
1500 size_t *bytes_consumed,
1505 size_t consumed = 0;
1509 bucket = buckets_in->
head;
1513 if (strfilter_convert_append_bucket(inst, stream, thisfilter,
1514 buckets_out, bucket->
buf, bucket->
buflen, &consumed,
1523 if (strfilter_convert_append_bucket(inst, stream, thisfilter,
1524 buckets_out,
NULL, 0, &consumed,
1530 if (bytes_consumed) {
1531 *bytes_consumed = consumed;
1537 if (bucket !=
NULL) {
1552 strfilter_convert_filter,
1553 strfilter_convert_dtor,
1570 if ((dot =
strchr(filtername,
'.')) ==
NULL) {
1579 }
else if (
strcasecmp(dot,
"base64-decode") == 0) {
1581 }
else if (
strcasecmp(dot,
"quoted-printable-encode") == 0) {
1583 }
else if (
strcasecmp(dot,
"quoted-printable-decode") == 0) {
1587 if (php_convert_filter_ctor(inst, conv_mode,
1603 strfilter_convert_create
1619 size_t *bytes_consumed,
1625 size_t consumed = 0;
1627 if (
data->offset == ~0) {
1630 while ((bucket = buckets_in->
head) !=
NULL) {
1632 consumed += bucket->
buflen;
1635 if (bytes_consumed) {
1636 *bytes_consumed = consumed;
1641 data->consumed += consumed;
1655 consumed_filter_filter,
1656 consumed_filter_dtor,
1674 fops = &consumed_filter_ops;
1680 consumed_filter_create
1713 switch (
data->state) {
1715 data->chunk_size = 0;
1718 if (*
p >=
'0' && *
p <=
'9') {
1719 data->chunk_size = (
data->chunk_size * 16) + (*
p -
'0');
1720 }
else if (*
p >=
'A' && *
p <=
'F') {
1721 data->chunk_size = (
data->chunk_size * 16) + (*
p -
'A' + 10);
1722 }
else if (*
p >=
'a' && *
p <=
'f') {
1723 data->chunk_size = (
data->chunk_size * 16) + (*
p -
'a' + 10);
1736 }
else if (
p ==
end) {
1741 while (
p <
end && *
p !=
'\r' && *
p !=
'\n') {
1762 if (
data->chunk_size == 0) {
1766 }
else if (
p ==
end) {
1777 if ((
size_t) (
end -
p) >=
data->chunk_size) {
1782 out_len +=
data->chunk_size;
1783 p +=
data->chunk_size;
1838 size_t *bytes_consumed,
1843 size_t consumed = 0;
1846 while (buckets_in->
head) {
1848 consumed += bucket->
buflen;
1853 if (bytes_consumed) {
1854 *bytes_consumed = consumed;
1886 data->chunk_size = 0;
1888 fops = &chunked_filter_ops;
1894 chunked_filter_create
1898static const struct {
1901} standard_filters[] = {
1902 { &strfilter_rot13_ops, &strfilter_rot13_factory },
1903 { &strfilter_toupper_ops, &strfilter_toupper_factory },
1904 { &strfilter_tolower_ops, &strfilter_tolower_factory },
1905 { &strfilter_convert_ops, &strfilter_convert_factory },
1906 { &consumed_filter_ops, &consumed_filter_factory },
1907 { &chunked_filter_ops, &chunked_filter_factory },
1917 for (i = 0; standard_filters[i].ops; i++) {
1919 standard_filters[i].
ops->label,
1920 standard_filters[i].factory
1932 for (i = 0; standard_filters[i].ops; i++) {
pack(string $format, mixed ... $values)
assert(mixed $assertion, Throwable|string|null $description=null)
strchr(string $haystack, string $needle, bool $before_needle=false)
zend_ffi_ctype_name_buf buf
#define GET_BOOL_PROP(ht, var, fldname)
struct _php_conv_base64_decode php_conv_base64_decode
struct _php_conv_base64_encode php_conv_base64_encode
#define PHP_CONV_BASE64_DECODE
struct _php_conv php_conv
php_conv_err_t(* php_conv_convert_func)(php_conv *, const char **, size_t *, char **, size_t *)
_php_chunked_filter_state
#define php_conv_convert(a, b, c, d, e)
const php_stream_filter_factory * factory
struct _php_convert_filter php_convert_filter
@ PHP_CONV_ERR_UNEXPECTED_EOS
@ PHP_CONV_ERR_INVALID_SEQ
struct _php_conv_qprint_encode php_conv_qprint_encode
const php_stream_filter_ops * ops
#define PHP_CONV_BASE64_ENCODE
#define PHP_CONV_QPRINT_OPT_BINARY
struct _php_chunked_filter_data php_chunked_filter_data
struct _php_conv_qprint_decode php_conv_qprint_decode
struct _php_consumed_filter_data php_consumed_filter_data
#define GET_STR_PROP(ht, var, var_len, fldname, persistent)
#define NEXT_CHAR(ps, icnt, lb_ptr, lb_cnt, lbchars)
#define PHP_CONV_QPRINT_OPT_FORCE_ENCODE_FIRST
enum _php_chunked_filter_state php_chunked_filter_state
enum _php_conv_err_t php_conv_err_t
void(* php_conv_dtor_func)(php_conv *)
#define CONSUME_CHAR(ps, icnt, lb_ptr, lb_cnt)
#define GET_UINT_PROP(ht, var, fldname)
#define PHP_CONV_QPRINT_DECODE
#define PHP_CONV_QPRINT_ENCODE
PHPAPI php_stream_bucket * php_stream_bucket_new(php_stream *stream, char *buf, size_t buflen, uint8_t own_buf, uint8_t buf_persistent)
PHPAPI php_stream_bucket * php_stream_bucket_make_writeable(php_stream_bucket *bucket)
PHPAPI void php_stream_bucket_append(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket)
PHPAPI void php_stream_bucket_delref(php_stream_bucket *bucket)
PHPAPI void php_stream_bucket_unlink(php_stream_bucket *bucket)
PHPAPI int php_stream_filter_register_factory(const char *filterpattern, const php_stream_filter_factory *factory)
PHPAPI int php_stream_filter_unregister_factory(const char *filterpattern)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
#define PHP_MSHUTDOWN_FUNCTION
#define PHP_MINIT_FUNCTION
unsigned const char * end
PHP_JSON_API size_t int options
#define php_stream_filter_alloc(fops, thisptr, persistent)
#define PSFS_FLAG_FLUSH_CLOSE
struct _php_stream_filter_ops php_stream_filter_ops
php_stream_filter_status_t
struct _php_stream_filter_factory php_stream_filter_factory
struct _php_stream_bucket php_stream_bucket
struct _php_stream_bucket_brigade php_stream_bucket_brigade
struct _php_stream php_stream
struct _php_stream_filter php_stream_filter
#define php_stream_seek(stream, offset, whence)
#define php_stream_tell(stream)
#define php_stream_is_persistent(stream)
PHPAPI char * php_strtr(char *str, size_t len, const char *str_from, const char *str_to, size_t trlen)
php_chunked_filter_state state
php_conv_convert_func convert_op
#define pestrdup(s, persistent)
#define perealloc(ptr, size, persistent)
#define pefree(ptr, persistent)
#define pemalloc(size, persistent)
#define pecalloc(nmemb, size, persistent)
#define strcasecmp(s1, s2)
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
ZEND_API zval *ZEND_FASTCALL zend_hash_str_find(const HashTable *ht, const char *str, size_t len)
struct _zend_string zend_string
ZEND_API bool ZEND_FASTCALL zend_is_true(const zval *op)
#define Z_ARRVAL_P(zval_p)
struct _zend_array HashTable
ZEND_RESULT_CODE zend_result