moriyoshi Wed Jul 2 12:19:58 2003 EDT Modified files: /php-src/ext/standard var_unserializer.re var_unserializer.c Log: Fixed a leak that occurs with "R" reference variable specifier. Index: php-src/ext/standard/var_unserializer.re diff -u php-src/ext/standard/var_unserializer.re:1.18 php-src/ext/standard/var_unserializer.re:1.19 --- php-src/ext/standard/var_unserializer.re:1.18 Wed Jun 25 23:24:11 2003 +++ php-src/ext/standard/var_unserializer.re Wed Jul 2 12:19:57 2003 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: var_unserializer.re,v 1.18 2003/06/26 03:24:11 sterling Exp $ */ +/* $Id: var_unserializer.re,v 1.19 2003/07/02 16:19:57 moriyoshi Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -265,6 +265,9 @@ return 0; } + if (*rval != NULL) { + zval_ptr_dtor(rval); + } *rval = *rval_ref; (*rval)->refcount++; (*rval)->is_ref = 1; Index: php-src/ext/standard/var_unserializer.c diff -u php-src/ext/standard/var_unserializer.c:1.27 php-src/ext/standard/var_unserializer.c:1.28 --- php-src/ext/standard/var_unserializer.c:1.27 Wed Jun 25 23:53:17 2003 +++ php-src/ext/standard/var_unserializer.c Wed Jul 2 12:19:57 2003 @@ -1,5 +1,5 @@ -/* Generated by re2c 0.5 on Wed Jun 25 23:00:04 2003 */ -#line 1 "/home/rei/PHP_CVS/php-src/ext/standard/var_unserializer.re" +/* Generated by re2c 0.5 on Thu Jul 3 01:22:57 2003 */ +#line 1 "/home/koizumi/src/php-src-5/ext/standard/var_unserializer.re" /* +----------------------------------------------------------------------+ | PHP Version 4 | @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: var_unserializer.c,v 1.27 2003/06/26 03:53:17 sterling Exp $ */ +/* $Id: var_unserializer.c,v 1.28 2003/07/02 16:19:57 moriyoshi Exp $ */ #include "php.h" #include "ext/standard/php_var.h" @@ -115,6 +115,7 @@ + static inline int parse_iv2(const char *p, const char **q) { char cursor; @@ -338,7 +339,7 @@ yych = *(YYMARKER = ++YYCURSOR); if(yych == ':') goto yy74; yy4: -#line 440 +#line 443 { return 0; } yy5: yych = *++YYCURSOR; if(yych == ';') goto yy72; @@ -373,7 +374,7 @@ goto yy4; yy13: yych = *++YYCURSOR; yy14: -#line 434 +#line 437 { /* this is the case where we have less data than planned */ php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data"); @@ -397,7 +398,7 @@ if(yych != '"') goto yy2; yy21: yych = *++YYCURSOR; yy22: -#line 349 +#line 352 { int len; int elements; @@ -504,7 +505,7 @@ if(yych != '"') goto yy2; yy28: yych = *++YYCURSOR; yy29: -#line 341 +#line 344 { INIT_PZVAL(*rval); @@ -534,7 +535,7 @@ if(yych != '{') goto yy2; yy35: yych = *++YYCURSOR; yy36: -#line 323 +#line 326 { int elements = parse_iv(start + 2); @@ -574,7 +575,7 @@ if(yych != '"') goto yy2; yy42: yych = *++YYCURSOR; yy43: -#line 303 +#line 306 { int len; char *str; @@ -651,7 +652,7 @@ } yy51: yych = *++YYCURSOR; yy52: -#line 296 +#line 299 { *p = YYCURSOR; INIT_PZVAL(*rval); @@ -724,7 +725,7 @@ if(yych != ';') goto yy2; yy64: yych = *++YYCURSOR; yy65: -#line 289 +#line 292 { *p = YYCURSOR; INIT_PZVAL(*rval); @@ -751,7 +752,7 @@ if(yych != ';') goto yy2; yy70: yych = *++YYCURSOR; yy71: -#line 282 +#line 285 { *p = YYCURSOR; INIT_PZVAL(*rval); @@ -760,7 +761,7 @@ } yy72: yych = *++YYCURSOR; yy73: -#line 275 +#line 278 { *p = YYCURSOR; INIT_PZVAL(*rval); @@ -799,6 +800,9 @@ return 0; } + if (*rval != NULL) { + zval_ptr_dtor(rval); + } *rval = *rval_ref; (*rval)->refcount++; (*rval)->is_ref = 1; @@ -806,7 +810,7 @@ return 1; } } -#line 442 +#line 445 return 0;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php