#19493 [Opn]: Error in older versions of serializer results in error of currend deserializer

From: Date: Wed, 25 Sep 2002 12:24:32 +0000
Subject: #19493 [Opn]: Error in older versions of serializer results in error of currend deserializer
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-20289@lists.php.net to get a copy of this message
 ID:               19493
 Updated by:       sas@php.net
 Reported By:      matthias.boldt@ticket-web.de
 Status:           Open
-Bug Type:         Session related
+Bug Type:         Strings related
 Operating System: Linux 2.4.18
 PHP Version:      4.2.3
 New Comment:

While the session module makes use of the serializer, it is not the
serializer itself.

Reclassified as "Strings related".


Previous Comments:
------------------------------------------------------------------------

[2002-09-20 02:19:10] matthias.boldt@ticket-web.de

Hello, there is a new patch (without C++-comments :-):

--- ext/standard/var_unserializer.re.old	Thu Sep 19 16:34:32 2002
+++ ext/standard/var_unserializer.re	Fri Sep 20 09:07:25 2002
@@ -144,31 +144,29 @@
 		if (!php_var_unserialize(&key, p, max, NULL TSRMLS_CC)) {
 			zval_dtor(key);
 			FREE_ZVAL(key);
-			return 0;
-		}
-
-		ALLOC_INIT_ZVAL(data);
-
-		if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) {
-			zval_dtor(key);
-			FREE_ZVAL(key);
-			zval_dtor(data);
-			FREE_ZVAL(data);
-			return 0;
-		}
+		} else {
+  			ALLOC_INIT_ZVAL(data);
 
-		switch (Z_TYPE_P(key)) {
-			case IS_LONG:
-				zend_hash_index_update(ht, Z_LVAL_P(key), &data, sizeof(data),
NULL);
-				break;
-			case IS_STRING:
-				zend_hash_update(ht, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &data,
sizeof(data), NULL);
-				break;
+			if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) {
+				zval_dtor(key);
+				FREE_ZVAL(key);
+				zval_dtor(data);
+				FREE_ZVAL(data);
+			} else {
+				switch (Z_TYPE_P(key)) {
+					case IS_LONG:
+						zend_hash_index_update(ht, Z_LVAL_P(key), &data, sizeof(data),
NULL);
+						break;
+					case IS_STRING:
+						zend_hash_update(ht, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1,
&data, sizeof(data), NULL);
+						break;
 
-		}
+				}
 		
-		zval_dtor(key);
-		FREE_ZVAL(key);
+				zval_dtor(key);
+				FREE_ZVAL(key);
+			}
+		}
 	}
 
 	return 1;

------------------------------------------------------------------------

[2002-09-19 13:17:02] kalowsky@php.net

No C++ comment styles allowed!  Can you fix that and resubmit the
patch?

------------------------------------------------------------------------

[2002-09-19 09:44:58] matthias.boldt@ticket-web.de

There is the diff:


--- ext/standard/var_unserializer.re.old	Thu Sep 19 16:34:32 2002
+++ ext/standard/var_unserializer.re	Thu Sep 19 11:20:08 2002
@@ -144,31 +144,29 @@
 		if (!php_var_unserialize(&key, p, max, NULL TSRMLS_CC)) {
 			zval_dtor(key);
 			FREE_ZVAL(key);
-			return 0;
-		}
-
-		ALLOC_INIT_ZVAL(data);
-
-		if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) {
-			zval_dtor(key);
-			FREE_ZVAL(key);
-			zval_dtor(data);
-			FREE_ZVAL(data);
-			return 0;
-		}
+		} else {
+  			ALLOC_INIT_ZVAL(data);
 
-		switch (Z_TYPE_P(key)) {
-			case IS_LONG:
-				zend_hash_index_update(ht, Z_LVAL_P(key), &data, sizeof(data),
NULL);
-				break;
-			case IS_STRING:
-				zend_hash_update(ht, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1, &data,
sizeof(data), NULL);
-				break;
+			if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) {
+				zval_dtor(key);
+				FREE_ZVAL(key);
+				zval_dtor(data);
+				FREE_ZVAL(data);
+			} else {
+				switch (Z_TYPE_P(key)) {
+					case IS_LONG:
+						zend_hash_index_update(ht, Z_LVAL_P(key), &data, sizeof(data),
NULL);
+						break;
+					case IS_STRING:
+						zend_hash_update(ht, Z_STRVAL_P(key), Z_STRLEN_P(key) + 1,
&data, sizeof(data), NULL);
+						break;
 
-		}
+				}
 		
-		zval_dtor(key);
-		FREE_ZVAL(key);
+				zval_dtor(key);
+				FREE_ZVAL(key);
+			}
+		}
 	}
 
 	return 1;
@@ -396,9 +394,9 @@
 }
 
 "}" {
-	/* this is the case where we have less data than planned */
+	// this is the case where we have less data than planned
 	zend_error(E_NOTICE, "Unexpected end of serialized data");
-	return 0; /* not sure if it should be 0 or 1 here? */
+	return 0; // not sure if it should be 0 or 1 here?
 }
 
 any	{ return 0; }

------------------------------------------------------------------------

[2002-09-19 09:05:16] sander@php.net

Please supply a unified diff here.

------------------------------------------------------------------------

[2002-09-19 04:53:25] matthias.boldt@ticket-web.de

I've changed thd category ...

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/19493

-- 
Edit this bug report at http://bugs.php.net/?id=19493&edit=1



Thread (9 messages)

« previous php.bugs (#20289) next »