]> granicus.if.org Git - php/commitdiff
Fixed a leak that occurs with "R" reference variable specifier.
authorMoriyoshi Koizumi <moriyoshi@php.net>
Wed, 2 Jul 2003 16:19:57 +0000 (16:19 +0000)
committerMoriyoshi Koizumi <moriyoshi@php.net>
Wed, 2 Jul 2003 16:19:57 +0000 (16:19 +0000)
ext/standard/var_unserializer.c
ext/standard/var_unserializer.re

index c0c32c3960d0059b6f59f85cdbc8da91895e1841..629adbe4a5719fde0063739809ea5461bc8c6c5b 100644 (file)
@@ -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                                                        |
@@ -115,6 +115,7 @@ PHPAPI void var_destroy(php_unserialize_data_t *var_hashx)
 
 
 
+
 static inline int parse_iv2(const char *p, const char **q)
 {
        char cursor;
@@ -338,7 +339,7 @@ yy3:        yyaccept = 0;
        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 @@ yy12:       yyaccept = 0;
        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 @@ yy20:       yych = *++YYCURSOR;
        if(yych != '"') goto yy2;
 yy21:  yych = *++YYCURSOR;
 yy22:
-#line 349
+#line 352
        {
        int len;
        int elements;
@@ -504,7 +505,7 @@ yy27:       yych = *++YYCURSOR;
        if(yych != '"') goto yy2;
 yy28:  yych = *++YYCURSOR;
 yy29:
-#line 341
+#line 344
        {
 
        INIT_PZVAL(*rval);
@@ -534,7 +535,7 @@ yy34:       yych = *++YYCURSOR;
        if(yych != '{') goto yy2;
 yy35:  yych = *++YYCURSOR;
 yy36:
-#line 323
+#line 326
        {
        int elements = parse_iv(start + 2);
 
@@ -574,7 +575,7 @@ yy41:       yych = *++YYCURSOR;
        if(yych != '"') goto yy2;
 yy42:  yych = *++YYCURSOR;
 yy43:
-#line 303
+#line 306
        {
        int len;
        char *str;
@@ -651,7 +652,7 @@ yy50:       if(yych <= ';'){
        }
 yy51:  yych = *++YYCURSOR;
 yy52:
-#line 296
+#line 299
        {
        *p = YYCURSOR;
        INIT_PZVAL(*rval);
@@ -724,7 +725,7 @@ yy63:       if(yych <= '/') goto yy2;
        if(yych != ';') goto yy2;
 yy64:  yych = *++YYCURSOR;
 yy65:
-#line 289
+#line 292
        {
        *p = YYCURSOR;
        INIT_PZVAL(*rval);
@@ -751,7 +752,7 @@ yy69:       if(yych <= '/') goto yy2;
        if(yych != ';') goto yy2;
 yy70:  yych = *++YYCURSOR;
 yy71:
-#line 282
+#line 285
        {
        *p = YYCURSOR;
        INIT_PZVAL(*rval);
@@ -760,7 +761,7 @@ yy71:
 }
 yy72:  yych = *++YYCURSOR;
 yy73:
-#line 275
+#line 278
        {
        *p = YYCURSOR;
        INIT_PZVAL(*rval);
@@ -799,6 +800,9 @@ yy79:
                return 0;
        }
 
+       if (*rval != NULL) {
+               zval_ptr_dtor(rval);
+       }
        *rval = *rval_ref;
        (*rval)->refcount++;
        (*rval)->is_ref = 1;
@@ -806,7 +810,7 @@ yy79:
        return 1;
 }
 }
-#line 442
+#line 445
 
 
        return 0;
index 7b925983d088583a0fc768df1fb5cc2c76f4d55d..041bbd0fb27b26f37020a227f015759307f712e3 100644 (file)
@@ -265,6 +265,9 @@ PHPAPI int php_var_unserialize(UNSERIALIZE_PARAMETER)
                return 0;
        }
 
+       if (*rval != NULL) {
+               zval_ptr_dtor(rval);
+       }
        *rval = *rval_ref;
        (*rval)->refcount++;
        (*rval)->is_ref = 1;