1
0
mirror of https://github.com/php/php-src.git synced 2026-04-02 05:32:28 +02:00

Use 'S' for escaped binary strings and 's' for non-escaped.

This commit is contained in:
Andrei Zmievski
2006-12-14 23:41:57 +00:00
parent c27c9666d3
commit 7ccba6624d
3 changed files with 400 additions and 315 deletions

View File

@@ -718,7 +718,7 @@ static inline void php_var_serialize_string(smart_str *buf, char *str, int len)
unsigned char c;
int i;
smart_str_appendl(buf, "s:", 2);
smart_str_appendl(buf, "S:", 2);
smart_str_append_long(buf, len);
smart_str_appendl(buf, ":\"", 2);

View File

@@ -1,4 +1,4 @@
/* Generated by re2c 0.9.12 on Fri Dec 1 11:18:14 2006 */
/* Generated by re2c 0.9.12 on Thu Dec 14 15:32:34 2006 */
#line 1 "ext/standard/var_unserializer.re"
/*
+----------------------------------------------------------------------+
@@ -468,110 +468,115 @@ yy0:
if((YYLIMIT - YYCURSOR) < 7) YYFILL(7);
yych = *YYCURSOR;
switch(yych){
case 'C': case 'O': goto yy13;
case 'C': case 'O': goto yy14;
case 'N': goto yy5;
case 'R': goto yy2;
case 'U': goto yy10;
case 'a': goto yy11;
case 'S': goto yy10;
case 'U': goto yy11;
case 'a': goto yy12;
case 'b': goto yy6;
case 'd': goto yy8;
case 'i': goto yy7;
case 'o': goto yy12;
case 'o': goto yy13;
case 'r': goto yy4;
case 's': goto yy9;
case '}': goto yy14;
default: goto yy16;
case '}': goto yy15;
default: goto yy17;
}
yy2: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy95;
if(yych == ':') goto yy103;
goto yy3;
yy3:
#line 725 "ext/standard/var_unserializer.re"
#line 753 "ext/standard/var_unserializer.re"
{ return 0; }
#line 493 "ext/standard/var_unserializer.c"
#line 494 "ext/standard/var_unserializer.c"
yy4: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy89;
if(yych == ':') goto yy97;
goto yy3;
yy5: yych = *++YYCURSOR;
if(yych == ';') goto yy87;
if(yych == ';') goto yy95;
goto yy3;
yy6: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy83;
if(yych == ':') goto yy91;
goto yy3;
yy7: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy77;
if(yych == ':') goto yy85;
goto yy3;
yy8: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy53;
if(yych == ':') goto yy61;
goto yy3;
yy9: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy46;
if(yych == ':') goto yy54;
goto yy3;
yy10: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy39;
if(yych == ':') goto yy47;
goto yy3;
yy11: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy32;
if(yych == ':') goto yy40;
goto yy3;
yy12: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy25;
if(yych == ':') goto yy33;
goto yy3;
yy13: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy17;
if(yych == ':') goto yy26;
goto yy3;
yy14: ++YYCURSOR;
goto yy15;
yy15:
#line 719 "ext/standard/var_unserializer.re"
yy14: yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if(yych == ':') goto yy18;
goto yy3;
yy15: ++YYCURSOR;
goto yy16;
yy16:
#line 747 "ext/standard/var_unserializer.re"
{
/* this is the case where we have less data than planned */
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data");
return 0; /* not sure if it should be 0 or 1 here? */
}
#line 542 "ext/standard/var_unserializer.c"
yy16: yych = *++YYCURSOR;
goto yy3;
#line 547 "ext/standard/var_unserializer.c"
yy17: yych = *++YYCURSOR;
goto yy3;
yy18: yych = *++YYCURSOR;
if(yybm[0+yych] & 128) {
goto yy20;
goto yy21;
}
if(yych == '+') goto yy19;
goto yy18;
yy18: YYCURSOR = YYMARKER;
if(yych == '+') goto yy20;
goto yy19;
yy19: YYCURSOR = YYMARKER;
switch(yyaccept){
case 0: goto yy3;
}
yy19: yych = *++YYCURSOR;
yy20: yych = *++YYCURSOR;
if(yybm[0+yych] & 128) {
goto yy20;
goto yy21;
}
goto yy18;
yy20: ++YYCURSOR;
goto yy19;
yy21: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
goto yy21;
yy21: if(yybm[0+yych] & 128) {
goto yy20;
}
if(yych != ':') goto yy18;
goto yy22;
yy22: yych = *++YYCURSOR;
if(yych != '"') goto yy18;
yy22: if(yybm[0+yych] & 128) {
goto yy21;
}
if(yych != ':') goto yy19;
goto yy23;
yy23: ++YYCURSOR;
yy23: yych = *++YYCURSOR;
if(yych != '"') goto yy19;
goto yy24;
yy24:
#line 606 "ext/standard/var_unserializer.re"
yy24: ++YYCURSOR;
goto yy25;
yy25:
#line 634 "ext/standard/var_unserializer.re"
{
size_t len, len2, len3, maxlen;
long elements;
@@ -684,36 +689,36 @@ yy24:
return object_common2(UNSERIALIZE_PASSTHRU, elements);
}
#line 688 "ext/standard/var_unserializer.c"
yy25: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy18;
goto yy26;
} else {
if(yych <= '-') goto yy26;
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy27;
goto yy18;
}
#line 693 "ext/standard/var_unserializer.c"
yy26: yych = *++YYCURSOR;
if(yych <= '/') goto yy18;
if(yych >= ':') goto yy18;
goto yy27;
yy27: ++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy19;
goto yy27;
} else {
if(yych <= '-') goto yy27;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy28;
goto yy19;
}
yy27: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy28;
yy28: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
goto yy28;
yy28: if(yych <= '/') goto yy18;
if(yych <= '9') goto yy27;
if(yych >= ';') goto yy18;
goto yy29;
yy29: yych = *++YYCURSOR;
if(yych != '"') goto yy18;
yy29: if(yych <= '/') goto yy19;
if(yych <= '9') goto yy28;
if(yych >= ';') goto yy19;
goto yy30;
yy30: ++YYCURSOR;
yy30: yych = *++YYCURSOR;
if(yych != '"') goto yy19;
goto yy31;
yy31:
#line 598 "ext/standard/var_unserializer.re"
yy31: ++YYCURSOR;
goto yy32;
yy32:
#line 626 "ext/standard/var_unserializer.re"
{
INIT_PZVAL(*rval);
@@ -721,31 +726,31 @@ yy31:
return object_common2(UNSERIALIZE_PASSTHRU,
object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
}
#line 725 "ext/standard/var_unserializer.c"
yy32: yych = *++YYCURSOR;
if(yych == '+') goto yy33;
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy34;
goto yy18;
#line 730 "ext/standard/var_unserializer.c"
yy33: yych = *++YYCURSOR;
if(yych <= '/') goto yy18;
if(yych >= ':') goto yy18;
goto yy34;
yy34: ++YYCURSOR;
if(yych == '+') goto yy34;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy35;
goto yy19;
yy34: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy35;
yy35: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
goto yy35;
yy35: if(yych <= '/') goto yy18;
if(yych <= '9') goto yy34;
if(yych >= ';') goto yy18;
goto yy36;
yy36: yych = *++YYCURSOR;
if(yych != '{') goto yy18;
yy36: if(yych <= '/') goto yy19;
if(yych <= '9') goto yy35;
if(yych >= ';') goto yy19;
goto yy37;
yy37: ++YYCURSOR;
yy37: yych = *++YYCURSOR;
if(yych != '{') goto yy19;
goto yy38;
yy38:
#line 576 "ext/standard/var_unserializer.re"
yy38: ++YYCURSOR;
goto yy39;
yy39:
#line 604 "ext/standard/var_unserializer.re"
{
long elements = parse_iv(start + 2);
/* use iv() not uiv() in order to check data range */
@@ -767,31 +772,31 @@ yy38:
return finish_nested_data(UNSERIALIZE_PASSTHRU);
}
#line 771 "ext/standard/var_unserializer.c"
yy39: yych = *++YYCURSOR;
if(yych == '+') goto yy40;
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy41;
goto yy18;
#line 776 "ext/standard/var_unserializer.c"
yy40: yych = *++YYCURSOR;
if(yych <= '/') goto yy18;
if(yych >= ':') goto yy18;
goto yy41;
yy41: ++YYCURSOR;
if(yych == '+') goto yy41;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy42;
goto yy19;
yy41: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy42;
yy42: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
goto yy42;
yy42: if(yych <= '/') goto yy18;
if(yych <= '9') goto yy41;
if(yych >= ';') goto yy18;
goto yy43;
yy43: yych = *++YYCURSOR;
if(yych != '"') goto yy18;
yy43: if(yych <= '/') goto yy19;
if(yych <= '9') goto yy42;
if(yych >= ';') goto yy19;
goto yy44;
yy44: ++YYCURSOR;
yy44: yych = *++YYCURSOR;
if(yych != '"') goto yy19;
goto yy45;
yy45:
#line 547 "ext/standard/var_unserializer.re"
yy45: ++YYCURSOR;
goto yy46;
yy46:
#line 575 "ext/standard/var_unserializer.re"
{
size_t len, maxlen;
UChar *ustr;
@@ -820,31 +825,31 @@ yy45:
ZVAL_UNICODEL(*rval, ustr, len, 0);
return 1;
}
#line 824 "ext/standard/var_unserializer.c"
yy46: yych = *++YYCURSOR;
if(yych == '+') goto yy47;
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy48;
goto yy18;
#line 829 "ext/standard/var_unserializer.c"
yy47: yych = *++YYCURSOR;
if(yych <= '/') goto yy18;
if(yych >= ':') goto yy18;
goto yy48;
yy48: ++YYCURSOR;
if(yych == '+') goto yy48;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy49;
goto yy19;
yy48: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy49;
yy49: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
goto yy49;
yy49: if(yych <= '/') goto yy18;
if(yych <= '9') goto yy48;
if(yych >= ';') goto yy18;
goto yy50;
yy50: yych = *++YYCURSOR;
if(yych != '"') goto yy18;
yy50: if(yych <= '/') goto yy19;
if(yych <= '9') goto yy49;
if(yych >= ';') goto yy19;
goto yy51;
yy51: ++YYCURSOR;
yy51: yych = *++YYCURSOR;
if(yych != '"') goto yy19;
goto yy52;
yy52:
#line 518 "ext/standard/var_unserializer.re"
yy52: ++YYCURSOR;
goto yy53;
yy53:
#line 546 "ext/standard/var_unserializer.re"
{
size_t len, maxlen;
char *str;
@@ -873,95 +878,147 @@ yy52:
ZVAL_STRINGL(*rval, str, len, 0);
return 1;
}
#line 877 "ext/standard/var_unserializer.c"
yy53: yych = *++YYCURSOR;
#line 882 "ext/standard/var_unserializer.c"
yy54: yych = *++YYCURSOR;
if(yych == '+') goto yy55;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy56;
goto yy19;
yy55: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy56;
yy56: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
goto yy57;
yy57: if(yych <= '/') goto yy19;
if(yych <= '9') goto yy56;
if(yych >= ';') goto yy19;
goto yy58;
yy58: yych = *++YYCURSOR;
if(yych != '"') goto yy19;
goto yy59;
yy59: ++YYCURSOR;
goto yy60;
yy60:
#line 518 "ext/standard/var_unserializer.re"
{
size_t len, maxlen;
char *str;
len = parse_uiv(start + 2);
maxlen = max - YYCURSOR;
if (maxlen < len) {
*p = start + 2;
return 0;
}
str = (char*)YYCURSOR;
YYCURSOR += len;
if (*(YYCURSOR) != '"') {
*p = YYCURSOR;
return 0;
}
YYCURSOR += 2;
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_STRINGL(*rval, str, len, 1);
return 1;
}
#line 934 "ext/standard/var_unserializer.c"
yy61: yych = *++YYCURSOR;
if(yych <= '/'){
if(yych <= ','){
if(yych == '+') goto yy57;
goto yy18;
if(yych == '+') goto yy65;
goto yy19;
} else {
if(yych <= '-') goto yy55;
if(yych <= '.') goto yy60;
goto yy18;
if(yych <= '-') goto yy63;
if(yych <= '.') goto yy68;
goto yy19;
}
} else {
if(yych <= 'I'){
if(yych <= '9') goto yy58;
if(yych <= 'H') goto yy18;
goto yy56;
if(yych <= '9') goto yy66;
if(yych <= 'H') goto yy19;
goto yy64;
} else {
if(yych != 'N') goto yy18;
goto yy54;
if(yych != 'N') goto yy19;
goto yy62;
}
}
yy54: yych = *++YYCURSOR;
if(yych == 'A') goto yy76;
goto yy18;
yy55: yych = *++YYCURSOR;
yy62: yych = *++YYCURSOR;
if(yych == 'A') goto yy84;
goto yy19;
yy63: yych = *++YYCURSOR;
if(yych <= '/'){
if(yych == '.') goto yy60;
goto yy18;
if(yych == '.') goto yy68;
goto yy19;
} else {
if(yych <= '9') goto yy58;
if(yych != 'I') goto yy18;
goto yy56;
if(yych <= '9') goto yy66;
if(yych != 'I') goto yy19;
goto yy64;
}
yy56: yych = *++YYCURSOR;
if(yych == 'N') goto yy72;
goto yy18;
yy57: yych = *++YYCURSOR;
if(yych == '.') goto yy60;
if(yych <= '/') goto yy18;
if(yych >= ':') goto yy18;
goto yy58;
yy58: ++YYCURSOR;
yy64: yych = *++YYCURSOR;
if(yych == 'N') goto yy80;
goto yy19;
yy65: yych = *++YYCURSOR;
if(yych == '.') goto yy68;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy66;
yy66: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
yych = *YYCURSOR;
goto yy59;
yy59: if(yych <= ':'){
goto yy67;
yy67: if(yych <= ':'){
if(yych <= '.'){
if(yych <= '-') goto yy18;
goto yy70;
if(yych <= '-') goto yy19;
goto yy78;
} else {
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy58;
goto yy18;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy66;
goto yy19;
}
} else {
if(yych <= 'E'){
if(yych <= ';') goto yy63;
if(yych <= 'D') goto yy18;
goto yy65;
if(yych <= ';') goto yy71;
if(yych <= 'D') goto yy19;
goto yy73;
} else {
if(yych == 'e') goto yy65;
goto yy18;
if(yych == 'e') goto yy73;
goto yy19;
}
}
yy60: yych = *++YYCURSOR;
if(yych <= '/') goto yy18;
if(yych >= ':') goto yy18;
goto yy61;
yy61: ++YYCURSOR;
yy68: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy69;
yy69: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
yych = *YYCURSOR;
goto yy62;
yy62: if(yych <= ';'){
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy61;
if(yych <= ':') goto yy18;
goto yy63;
goto yy70;
yy70: if(yych <= ';'){
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy69;
if(yych <= ':') goto yy19;
goto yy71;
} else {
if(yych <= 'E'){
if(yych <= 'D') goto yy18;
goto yy65;
if(yych <= 'D') goto yy19;
goto yy73;
} else {
if(yych == 'e') goto yy65;
goto yy18;
if(yych == 'e') goto yy73;
goto yy19;
}
}
yy63: ++YYCURSOR;
goto yy64;
yy64:
yy71: ++YYCURSOR;
goto yy72;
yy72:
#line 511 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
@@ -969,66 +1026,66 @@ yy64:
ZVAL_DOUBLE(*rval, zend_strtod((const char *)start + 2, NULL));
return 1;
}
#line 973 "ext/standard/var_unserializer.c"
yy65: yych = *++YYCURSOR;
#line 1030 "ext/standard/var_unserializer.c"
yy73: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy18;
goto yy66;
if(yych != '+') goto yy19;
goto yy74;
} else {
if(yych <= '-') goto yy66;
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy67;
goto yy18;
if(yych <= '-') goto yy74;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy75;
goto yy19;
}
yy66: yych = *++YYCURSOR;
yy74: yych = *++YYCURSOR;
if(yych <= ','){
if(yych == '+') goto yy69;
goto yy18;
if(yych == '+') goto yy77;
goto yy19;
} else {
if(yych <= '-') goto yy69;
if(yych <= '/') goto yy18;
if(yych >= ':') goto yy18;
goto yy67;
if(yych <= '-') goto yy77;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy75;
}
yy67: ++YYCURSOR;
yy75: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy68;
yy68: if(yych <= '/') goto yy18;
if(yych <= '9') goto yy67;
if(yych == ';') goto yy63;
goto yy18;
yy69: yych = *++YYCURSOR;
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy67;
goto yy18;
yy70: ++YYCURSOR;
goto yy76;
yy76: if(yych <= '/') goto yy19;
if(yych <= '9') goto yy75;
if(yych == ';') goto yy71;
goto yy19;
yy77: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy75;
goto yy19;
yy78: ++YYCURSOR;
if((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
yych = *YYCURSOR;
goto yy71;
yy71: if(yych <= ';'){
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy70;
if(yych <= ':') goto yy18;
goto yy63;
goto yy79;
yy79: if(yych <= ';'){
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy78;
if(yych <= ':') goto yy19;
goto yy71;
} else {
if(yych <= 'E'){
if(yych <= 'D') goto yy18;
goto yy65;
if(yych <= 'D') goto yy19;
goto yy73;
} else {
if(yych == 'e') goto yy65;
goto yy18;
if(yych == 'e') goto yy73;
goto yy19;
}
}
yy72: yych = *++YYCURSOR;
if(yych != 'F') goto yy18;
goto yy73;
yy73: yych = *++YYCURSOR;
if(yych != ';') goto yy18;
goto yy74;
yy74: ++YYCURSOR;
goto yy75;
yy75:
yy80: yych = *++YYCURSOR;
if(yych != 'F') goto yy19;
goto yy81;
yy81: yych = *++YYCURSOR;
if(yych != ';') goto yy19;
goto yy82;
yy82: ++YYCURSOR;
goto yy83;
yy83:
#line 496 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
@@ -1044,35 +1101,35 @@ yy75:
return 1;
}
#line 1048 "ext/standard/var_unserializer.c"
yy76: yych = *++YYCURSOR;
if(yych == 'N') goto yy73;
goto yy18;
yy77: yych = *++YYCURSOR;
#line 1105 "ext/standard/var_unserializer.c"
yy84: yych = *++YYCURSOR;
if(yych == 'N') goto yy81;
goto yy19;
yy85: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy18;
goto yy78;
if(yych != '+') goto yy19;
goto yy86;
} else {
if(yych <= '-') goto yy78;
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy79;
goto yy18;
if(yych <= '-') goto yy86;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy87;
goto yy19;
}
yy78: yych = *++YYCURSOR;
if(yych <= '/') goto yy18;
if(yych >= ':') goto yy18;
goto yy79;
yy79: ++YYCURSOR;
yy86: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy87;
yy87: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy80;
yy80: if(yych <= '/') goto yy18;
if(yych <= '9') goto yy79;
if(yych != ';') goto yy18;
goto yy81;
yy81: ++YYCURSOR;
goto yy82;
yy82:
goto yy88;
yy88: if(yych <= '/') goto yy19;
if(yych <= '9') goto yy87;
if(yych != ';') goto yy19;
goto yy89;
yy89: ++YYCURSOR;
goto yy90;
yy90:
#line 489 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
@@ -1080,17 +1137,17 @@ yy82:
ZVAL_LONG(*rval, parse_iv(start + 2));
return 1;
}
#line 1084 "ext/standard/var_unserializer.c"
yy83: yych = *++YYCURSOR;
if(yych <= '/') goto yy18;
if(yych >= '2') goto yy18;
goto yy84;
yy84: yych = *++YYCURSOR;
if(yych != ';') goto yy18;
goto yy85;
yy85: ++YYCURSOR;
goto yy86;
yy86:
#line 1141 "ext/standard/var_unserializer.c"
yy91: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych >= '2') goto yy19;
goto yy92;
yy92: yych = *++YYCURSOR;
if(yych != ';') goto yy19;
goto yy93;
yy93: ++YYCURSOR;
goto yy94;
yy94:
#line 482 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
@@ -1098,10 +1155,10 @@ yy86:
ZVAL_BOOL(*rval, parse_iv(start + 2));
return 1;
}
#line 1102 "ext/standard/var_unserializer.c"
yy87: ++YYCURSOR;
goto yy88;
yy88:
#line 1159 "ext/standard/var_unserializer.c"
yy95: ++YYCURSOR;
goto yy96;
yy96:
#line 475 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
@@ -1109,32 +1166,32 @@ yy88:
ZVAL_NULL(*rval);
return 1;
}
#line 1113 "ext/standard/var_unserializer.c"
yy89: yych = *++YYCURSOR;
#line 1170 "ext/standard/var_unserializer.c"
yy97: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy18;
goto yy90;
if(yych != '+') goto yy19;
goto yy98;
} else {
if(yych <= '-') goto yy90;
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy91;
goto yy18;
if(yych <= '-') goto yy98;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy99;
goto yy19;
}
yy90: yych = *++YYCURSOR;
if(yych <= '/') goto yy18;
if(yych >= ':') goto yy18;
goto yy91;
yy91: ++YYCURSOR;
yy98: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy99;
yy99: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy92;
yy92: if(yych <= '/') goto yy18;
if(yych <= '9') goto yy91;
if(yych != ';') goto yy18;
goto yy93;
yy93: ++YYCURSOR;
goto yy94;
yy94:
goto yy100;
yy100: if(yych <= '/') goto yy19;
if(yych <= '9') goto yy99;
if(yych != ';') goto yy19;
goto yy101;
yy101: ++YYCURSOR;
goto yy102;
yy102:
#line 452 "ext/standard/var_unserializer.re"
{
long id;
@@ -1158,32 +1215,32 @@ yy94:
return 1;
}
#line 1162 "ext/standard/var_unserializer.c"
yy95: yych = *++YYCURSOR;
#line 1219 "ext/standard/var_unserializer.c"
yy103: yych = *++YYCURSOR;
if(yych <= ','){
if(yych != '+') goto yy18;
goto yy96;
if(yych != '+') goto yy19;
goto yy104;
} else {
if(yych <= '-') goto yy96;
if(yych <= '/') goto yy18;
if(yych <= '9') goto yy97;
goto yy18;
if(yych <= '-') goto yy104;
if(yych <= '/') goto yy19;
if(yych <= '9') goto yy105;
goto yy19;
}
yy96: yych = *++YYCURSOR;
if(yych <= '/') goto yy18;
if(yych >= ':') goto yy18;
goto yy97;
yy97: ++YYCURSOR;
yy104: yych = *++YYCURSOR;
if(yych <= '/') goto yy19;
if(yych >= ':') goto yy19;
goto yy105;
yy105: ++YYCURSOR;
if(YYLIMIT == YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
goto yy98;
yy98: if(yych <= '/') goto yy18;
if(yych <= '9') goto yy97;
if(yych != ';') goto yy18;
goto yy99;
yy99: ++YYCURSOR;
goto yy100;
yy100:
goto yy106;
yy106: if(yych <= '/') goto yy19;
if(yych <= '9') goto yy105;
if(yych != ';') goto yy19;
goto yy107;
yy107: ++YYCURSOR;
goto yy108;
yy108:
#line 431 "ext/standard/var_unserializer.re"
{
long id;
@@ -1205,10 +1262,10 @@ yy100:
return 1;
}
#line 1209 "ext/standard/var_unserializer.c"
#line 1266 "ext/standard/var_unserializer.c"
}
}
#line 727 "ext/standard/var_unserializer.re"
#line 755 "ext/standard/var_unserializer.re"
return 0;

View File

@@ -526,6 +526,34 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
return 0;
}
str = (char*)YYCURSOR;
YYCURSOR += len;
if (*(YYCURSOR) != '"') {
*p = YYCURSOR;
return 0;
}
YYCURSOR += 2;
*p = YYCURSOR;
INIT_PZVAL(*rval);
ZVAL_STRINGL(*rval, str, len, 1);
return 1;
}
"S:" uiv ":" ["] {
size_t len, maxlen;
char *str;
len = parse_uiv(start + 2);
maxlen = max - YYCURSOR;
if (maxlen < len) {
*p = start + 2;
return 0;
}
if ((str = unserialize_str(&YYCURSOR, len)) == NULL) {
return 0;
}