helly Tue Mar 23 15:54:00 2004 EDT Modified files: /php-src/ext/standard var_unserializer.c Log: Bugfix #27646: Cannot serialize/unserialize non-finite numeric values
http://cvs.php.net/diff.php/php-src/ext/standard/var_unserializer.c?r1=1.35&r2=1.36&ty=u Index: php-src/ext/standard/var_unserializer.c diff -u php-src/ext/standard/var_unserializer.c:1.35 php-src/ext/standard/var_unserializer.c:1.36 --- php-src/ext/standard/var_unserializer.c:1.35 Tue Feb 3 10:50:21 2004 +++ php-src/ext/standard/var_unserializer.c Tue Mar 23 15:54:00 2004 @@ -1,6 +1,6 @@ -/* Generated by re2c 0.5 on Tue Feb 3 16:01:43 2004 */ -#line 1 "var_unserializer.re" -/* +/* Generated by re2c 0.9.2 on Tue Mar 23 21:48:54 2004 */ +#line 1 "/usr/src/php5/ext/standard/var_unserializer.re" +/* +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: var_unserializer.c,v 1.35 2004/02/03 15:50:21 sniper Exp $ */ +/* $Id: var_unserializer.c,v 1.36 2004/03/23 20:54:00 helly Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -111,7 +111,7 @@ #define YYMARKER marker -#line 118 +#line 118 "/usr/src/php5/ext/standard/var_unserializer.re" @@ -252,6 +252,8 @@ + +#line 7 "re2c-output.c" { YYCTYPE yych; unsigned int yyaccept; @@ -292,7 +294,7 @@ goto yy0; yy1: ++YYCURSOR; yy0: - if((YYLIMIT - YYCURSOR) < 5) YYFILL(5); + if((YYLIMIT - YYCURSOR) < 6) YYFILL(6); yych = *YYCURSOR; if(yych <= 'd'){ if(yych <= 'R'){ @@ -331,6 +333,7 @@ } else { if(yych <= '}') goto yy14; if(yych <= '\277') goto yy16; + goto yy2; } } } @@ -340,24 +343,26 @@ } yy3: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy81; + if(yych == ':') goto yy86; + goto yy4; yy4: -#line 461 - { return 0; } +#line 461 "/usr/src/php5/ext/standard/var_unserializer.re" +{ return 0; } +#line 102 "re2c-output.c" yy5: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy75; + if(yych == ':') goto yy80; goto yy4; yy6: yych = *++YYCURSOR; - if(yych == ';') goto yy73; + if(yych == ';') goto yy78; goto yy4; yy7: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy67; + if(yych == ':') goto yy72; goto yy4; yy8: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); - if(yych == ':') goto yy61; + if(yych == ':') goto yy66; goto yy4; yy9: yyaccept = 0; yych = *(YYMARKER = ++YYCURSOR); @@ -380,32 +385,39 @@ if(yych == ':') goto yy17; goto yy4; yy14: yych = *++YYCURSOR; + goto yy15; yy15: -#line 455 - { +#line 455 "/usr/src/php5/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 147 "re2c-output.c" yy16: yych = *++YYCURSOR; goto yy4; yy17: yych = *++YYCURSOR; if(yybm[0+yych] & 128) goto yy19; if(yych != '+') goto yy2; + goto yy18; yy18: yych = *++YYCURSOR; if(yybm[0+yych] & 128) goto yy19; goto yy2; yy19: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy20; yy20: if(yybm[0+yych] & 128) goto yy19; if(yych != ':') goto yy2; + goto yy21; yy21: yych = *++YYCURSOR; if(yych != '"') goto yy2; + goto yy22; yy22: yych = *++YYCURSOR; + goto yy23; yy23: -#line 376 - { +#line 376 "/usr/src/php5/ext/standard/var_unserializer.re" +{ int len; int elements; int len2; @@ -483,9 +495,11 @@ return object_common2(UNSERIALIZE_PASSTHRU, elements); } +#line 249 "re2c-output.c" yy24: yych = *++YYCURSOR; if(yych <= ','){ if(yych != '+') goto yy2; + goto yy25; } else { if(yych <= '-') goto yy25; if(yych <= '/') goto yy2; @@ -495,24 +509,30 @@ yy25: yych = *++YYCURSOR; if(yych <= '/') goto yy2; if(yych >= ':') goto yy2; + goto yy26; yy26: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy27; yy27: if(yych <= '/') goto yy2; if(yych <= '9') goto yy26; if(yych >= ';') goto yy2; + goto yy28; yy28: yych = *++YYCURSOR; if(yych != '"') goto yy2; + goto yy29; yy29: yych = *++YYCURSOR; + goto yy30; yy30: -#line 368 - { +#line 368 "/usr/src/php5/ext/standard/var_unserializer.re" +{ INIT_PZVAL(*rval); return object_common2(UNSERIALIZE_PASSTHRU, object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR)); } +#line 286 "re2c-output.c" yy31: yych = *++YYCURSOR; if(yych == '+') goto yy32; if(yych <= '/') goto yy2; @@ -521,18 +541,23 @@ yy32: yych = *++YYCURSOR; if(yych <= '/') goto yy2; if(yych >= ':') goto yy2; + goto yy33; yy33: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy34; yy34: if(yych <= '/') goto yy2; if(yych <= '9') goto yy33; if(yych >= ';') goto yy2; + goto yy35; yy35: yych = *++YYCURSOR; if(yych != '{') goto yy2; + goto yy36; yy36: yych = *++YYCURSOR; + goto yy37; yy37: -#line 350 - { +#line 350 "/usr/src/php5/ext/standard/var_unserializer.re" +{ int elements = parse_iv(start + 2); *p = YYCURSOR; @@ -549,6 +574,7 @@ return finish_nested_data(UNSERIALIZE_PASSTHRU); } +#line 328 "re2c-output.c" yy38: yych = *++YYCURSOR; if(yych == '+') goto yy39; if(yych <= '/') goto yy2; @@ -557,18 +583,23 @@ yy39: yych = *++YYCURSOR; if(yych <= '/') goto yy2; if(yych >= ':') goto yy2; + goto yy40; yy40: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy41; yy41: if(yych <= '/') goto yy2; if(yych <= '9') goto yy40; if(yych >= ';') goto yy2; + goto yy42; yy42: yych = *++YYCURSOR; if(yych != '"') goto yy2; + goto yy43; yy43: yych = *++YYCURSOR; + goto yy44; yy44: -#line 330 - { +#line 330 "/usr/src/php5/ext/standard/var_unserializer.re" +{ int len; char *str; @@ -587,27 +618,40 @@ ZVAL_STRINGL(*rval, str, len, 0); return 1; } +#line 372 "re2c-output.c" yy45: yych = *++YYCURSOR; - if(yych <= '-'){ - if(yych == '+') goto yy46; - if(yych <= ',') goto yy2; + if(yych <= '/'){ + if(yych <= ','){ + if(yych != '+') goto yy2; + goto yy46; + } else { + if(yych <= '-') goto yy46; + if(yych <= '.') goto yy49; + goto yy2; + } } else { - if(yych <= '.') goto yy49; - if(yych <= '/') goto yy2; - if(yych <= '9') goto yy47; - goto yy2; + if(yych <= 'I'){ + if(yych <= '9') goto yy47; + if(yych <= 'H') goto yy2; + goto yy51; + } else { + if(yych == 'N') goto yy50; + goto yy2; + } } yy46: yych = *++YYCURSOR; if(yych == '.') goto yy49; if(yych <= '/') goto yy2; if(yych >= ':') goto yy2; + goto yy47; yy47: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; + goto yy48; yy48: if(yych <= ':'){ if(yych <= '.'){ if(yych <= '-') goto yy2; - goto yy59; + goto yy64; } else { if(yych <= '/') goto yy2; if(yych <= '9') goto yy47; @@ -615,173 +659,216 @@ } } else { if(yych <= 'E'){ - if(yych <= ';') goto yy52; + if(yych <= ';') goto yy54; if(yych <= 'D') goto yy2; - goto yy54; + goto yy59; } else { - if(yych == 'e') goto yy54; + if(yych == 'e') goto yy59; goto yy2; } } yy49: yych = *++YYCURSOR; if(yych <= '/') goto yy2; - if(yych >= ':') goto yy2; -yy50: ++YYCURSOR; + if(yych <= '9') goto yy57; + goto yy2; +yy50: yych = *++YYCURSOR; + if(yych == 'A') goto yy56; + goto yy2; +yy51: yych = *++YYCURSOR; + if(yych != 'N') goto yy2; + goto yy52; +yy52: yych = *++YYCURSOR; + if(yych != 'F') goto yy2; + goto yy53; +yy53: yych = *++YYCURSOR; + if(yych != ';') goto yy2; + goto yy54; +yy54: yych = *++YYCURSOR; + goto yy55; +yy55: +#line 323 "/usr/src/php5/ext/standard/var_unserializer.re" +{ + *p = YYCURSOR; + INIT_PZVAL(*rval); + ZVAL_DOUBLE(*rval, atof(start + 2)); + return 1; +} +#line 447 "re2c-output.c" +yy56: yych = *++YYCURSOR; + if(yych == 'N') goto yy53; + goto yy2; +yy57: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy51: if(yych <= ';'){ + goto yy58; +yy58: if(yych <= ';'){ if(yych <= '/') goto yy2; - if(yych <= '9') goto yy50; + if(yych <= '9') goto yy57; if(yych <= ':') goto yy2; + goto yy54; } else { if(yych <= 'E'){ if(yych <= 'D') goto yy2; - goto yy54; + goto yy59; } else { - if(yych == 'e') goto yy54; - goto yy2; + if(yych != 'e') goto yy2; + goto yy59; } } -yy52: yych = *++YYCURSOR; -yy53: -#line 323 - { - *p = YYCURSOR; - INIT_PZVAL(*rval); - ZVAL_DOUBLE(*rval, atof(start + 2)); - return 1; -} -yy54: yych = *++YYCURSOR; +yy59: yych = *++YYCURSOR; if(yych <= ','){ if(yych != '+') goto yy2; + goto yy60; } else { - if(yych <= '-') goto yy55; + if(yych <= '-') goto yy60; if(yych <= '/') goto yy2; - if(yych <= '9') goto yy56; + if(yych <= '9') goto yy61; goto yy2; } -yy55: yych = *++YYCURSOR; +yy60: yych = *++YYCURSOR; if(yych <= ','){ - if(yych == '+') goto yy58; + if(yych == '+') goto yy63; goto yy2; } else { - if(yych <= '-') goto yy58; + if(yych <= '-') goto yy63; if(yych <= '/') goto yy2; if(yych >= ':') goto yy2; + goto yy61; } -yy56: ++YYCURSOR; +yy61: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy57: if(yych <= '/') goto yy2; - if(yych <= '9') goto yy56; - if(yych == ';') goto yy52; + goto yy62; +yy62: if(yych <= '/') goto yy2; + if(yych <= '9') goto yy61; + if(yych == ';') goto yy54; goto yy2; -yy58: yych = *++YYCURSOR; +yy63: yych = *++YYCURSOR; if(yych <= '/') goto yy2; - if(yych <= '9') goto yy56; + if(yych <= '9') goto yy61; goto yy2; -yy59: ++YYCURSOR; +yy64: ++YYCURSOR; if((YYLIMIT - YYCURSOR) < 4) YYFILL(4); yych = *YYCURSOR; -yy60: if(yych <= ';'){ + goto yy65; +yy65: if(yych <= ';'){ if(yych <= '/') goto yy2; - if(yych <= '9') goto yy59; + if(yych <= '9') goto yy64; if(yych <= ':') goto yy2; - goto yy52; + goto yy54; } else { if(yych <= 'E'){ if(yych <= 'D') goto yy2; - goto yy54; + goto yy59; } else { - if(yych == 'e') goto yy54; + if(yych == 'e') goto yy59; goto yy2; } } -yy61: yych = *++YYCURSOR; +yy66: yych = *++YYCURSOR; if(yych <= ','){ if(yych != '+') goto yy2; + goto yy67; } else { - if(yych <= '-') goto yy62; + if(yych <= '-') goto yy67; if(yych <= '/') goto yy2; - if(yych <= '9') goto yy63; + if(yych <= '9') goto yy68; goto yy2; } -yy62: yych = *++YYCURSOR; +yy67: yych = *++YYCURSOR; if(yych <= '/') goto yy2; if(yych >= ':') goto yy2; -yy63: ++YYCURSOR; + goto yy68; +yy68: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy64: if(yych <= '/') goto yy2; - if(yych <= '9') goto yy63; + goto yy69; +yy69: if(yych <= '/') goto yy2; + if(yych <= '9') goto yy68; if(yych != ';') goto yy2; -yy65: yych = *++YYCURSOR; -yy66: -#line 316 - { + goto yy70; +yy70: yych = *++YYCURSOR; + goto yy71; +yy71: +#line 316 "/usr/src/php5/ext/standard/var_unserializer.re" +{ *p = YYCURSOR; INIT_PZVAL(*rval); ZVAL_LONG(*rval, parse_iv(start + 2)); return 1; } -yy67: yych = *++YYCURSOR; +#line 551 "re2c-output.c" +yy72: yych = *++YYCURSOR; if(yych <= ','){ if(yych != '+') goto yy2; + goto yy73; } else { - if(yych <= '-') goto yy68; + if(yych <= '-') goto yy73; if(yych <= '/') goto yy2; - if(yych <= '9') goto yy69; + if(yych <= '9') goto yy74; goto yy2; } -yy68: yych = *++YYCURSOR; +yy73: yych = *++YYCURSOR; if(yych <= '/') goto yy2; if(yych >= ':') goto yy2; -yy69: ++YYCURSOR; + goto yy74; +yy74: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy70: if(yych <= '/') goto yy2; - if(yych <= '9') goto yy69; + goto yy75; +yy75: if(yych <= '/') goto yy2; + if(yych <= '9') goto yy74; if(yych != ';') goto yy2; -yy71: yych = *++YYCURSOR; -yy72: -#line 309 - { + goto yy76; +yy76: yych = *++YYCURSOR; + goto yy77; +yy77: +#line 309 "/usr/src/php5/ext/standard/var_unserializer.re" +{ *p = YYCURSOR; INIT_PZVAL(*rval); ZVAL_BOOL(*rval, parse_iv(start + 2)); return 1; } -yy73: yych = *++YYCURSOR; -yy74: -#line 302 - { +#line 584 "re2c-output.c" +yy78: yych = *++YYCURSOR; + goto yy79; +yy79: +#line 302 "/usr/src/php5/ext/standard/var_unserializer.re" +{ *p = YYCURSOR; INIT_PZVAL(*rval); ZVAL_NULL(*rval); return 1; } -yy75: yych = *++YYCURSOR; +#line 595 "re2c-output.c" +yy80: yych = *++YYCURSOR; if(yych <= ','){ if(yych != '+') goto yy2; + goto yy81; } else { - if(yych <= '-') goto yy76; + if(yych <= '-') goto yy81; if(yych <= '/') goto yy2; - if(yych <= '9') goto yy77; + if(yych <= '9') goto yy82; goto yy2; } -yy76: yych = *++YYCURSOR; +yy81: yych = *++YYCURSOR; if(yych <= '/') goto yy2; if(yych >= ':') goto yy2; -yy77: ++YYCURSOR; + goto yy82; +yy82: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy78: if(yych <= '/') goto yy2; - if(yych <= '9') goto yy77; + goto yy83; +yy83: if(yych <= '/') goto yy2; + if(yych <= '9') goto yy82; if(yych != ';') goto yy2; -yy79: yych = *++YYCURSOR; -yy80: -#line 281 - { + goto yy84; +yy84: yych = *++YYCURSOR; + goto yy85; +yy85: +#line 281 "/usr/src/php5/ext/standard/var_unserializer.re" +{ int id; *p = YYCURSOR; @@ -801,28 +888,34 @@ return 1; } -yy81: yych = *++YYCURSOR; +#line 642 "re2c-output.c" +yy86: yych = *++YYCURSOR; if(yych <= ','){ if(yych != '+') goto yy2; + goto yy87; } else { - if(yych <= '-') goto yy82; + if(yych <= '-') goto yy87; if(yych <= '/') goto yy2; - if(yych <= '9') goto yy83; + if(yych <= '9') goto yy88; goto yy2; } -yy82: yych = *++YYCURSOR; +yy87: yych = *++YYCURSOR; if(yych <= '/') goto yy2; if(yych >= ':') goto yy2; -yy83: ++YYCURSOR; + goto yy88; +yy88: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy84: if(yych <= '/') goto yy2; - if(yych <= '9') goto yy83; + goto yy89; +yy89: if(yych <= '/') goto yy2; + if(yych <= '9') goto yy88; if(yych != ';') goto yy2; -yy85: yych = *++YYCURSOR; -yy86: -#line 260 - { + goto yy90; +yy90: yych = *++YYCURSOR; + goto yy91; +yy91: +#line 260 "/usr/src/php5/ext/standard/var_unserializer.re" +{ int id; *p = YYCURSOR; @@ -842,8 +935,9 @@ return 1; } +#line 689 "re2c-output.c" } -#line 463 +#line 463 "/usr/src/php5/ext/standard/var_unserializer.re" return 0;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php