From: Thies C. Arntzen Date: Wed, 8 Dec 1999 14:40:46 +0000 (+0000) Subject: (unserialize) now cleans up better on failure! X-Git-Tag: RETURN_REF_BP~43 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=276c0a378df910c3fa6f28c8b8bb2f45f4b2a975;p=php (unserialize) now cleans up better on failure! --- diff --git a/ext/standard/var.c b/ext/standard/var.c index acd1cc07ed..233d23b349 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -428,7 +428,6 @@ int php_var_unserialize(pval **rval, const char **p, const char *max) (*p)++; } if (**p != ':' || *((*p) + 1) != '{') { - pval_destructor(*rval); return 0; } for ((*p) += 2; **p && **p != '}' && i > 0; i--) { @@ -436,13 +435,11 @@ int php_var_unserialize(pval **rval, const char **p, const char *max) pval *data = emalloc(sizeof(pval)); if (!php_var_unserialize(&key, p, max)) { - pval_destructor(*rval); efree(key); efree(data); return 0; } if (!php_var_unserialize(&data, p, max)) { - pval_destructor(*rval); pval_destructor(key); efree(key); efree(data); @@ -503,6 +500,7 @@ PHP_FUNCTION(unserialize) } if (!php_var_unserialize(&return_value, &p, p + (*buf)->value.str.len)) { + zval_dtor(return_value); php_error(E_NOTICE, "unserialize() failed at offset %d of %d bytes",p-(*buf)->value.str.val,(*buf)->value.str.len); RETURN_FALSE; }