diff options
Diffstat (limited to 'php-reg67072.patch')
-rw-r--r-- | php-reg67072.patch | 50 |
1 files changed, 46 insertions, 4 deletions
diff --git a/php-reg67072.patch b/php-reg67072.patch index 6905db8..0258d95 100644 --- a/php-reg67072.patch +++ b/php-reg67072.patch @@ -1,26 +1,68 @@ +From 20568e502814fffc41d91a22edaf75ff5ae19d5c Mon Sep 17 00:00:00 2001 +From: Anatol Belski <ab@php.net> +Date: Tue, 3 Jun 2014 20:43:58 +0200 +Subject: [PATCH] Fixed regression introduced by patch for bug #67072 + +This applies to 5.4 and 5.5 only as a legacy fix. +--- + ext/standard/tests/serialize/005.phpt | 8 ++--- + ext/standard/var_unserializer.c | 68 ++++++++++++++++++----------------- + ext/standard/var_unserializer.re | 6 +++- + 3 files changed, 44 insertions(+), 38 deletions(-) + +diff --git a/ext/standard/tests/serialize/005.phpt b/ext/standard/tests/serialize/005.phpt +index 2df2701..07d47bd 100644 +--- a/ext/standard/tests/serialize/005.phpt ++++ b/ext/standard/tests/serialize/005.phpt +@@ -156,11 +156,9 @@ object(TestNAOld)#%d (0) { + } + ===NANew=== + unserializer(TestNANew) +- +-Warning: Erroneous data format for unserializing 'TestNANew' in %s005.php on line %d +- +-Notice: unserialize(): Error at offset 19 of 20 bytes in %s005.php on line %d +-bool(false) ++TestNew::__wakeup() ++object(TestNANew)#1 (0) { ++} + ===NANew2=== + unserializer(TestNANew2) + TestNew::unserialize() diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c -index 003bac9..ed6a69c 100644 +index 003bac9..29d2e0f 100644 --- a/ext/standard/var_unserializer.c +++ b/ext/standard/var_unserializer.c -@@ -396,7 +396,7 @@ static inline long object_common1(UNSERIALIZE_PARAMETER, zend_class_entry *ce) +@@ -396,7 +396,11 @@ static inline long object_common1(UNSERIALIZE_PARAMETER, zend_class_entry *ce) (*p) += 2; - if (ce->serialize == NULL) { ++ /* The internal class check here is a BC fix only, userspace classes implementing the ++ Serializable interface have eventually an inconsistent behavior at this place when ++ unserialized from a manipulated string. Additionaly the interal classes can possibly ++ crash PHP so they're still disabled here. */ + if (ce->serialize == NULL || ZEND_INTERNAL_CLASS != ce->type) { object_init_ex(*rval, ce); } else { /* If this class implements Serializable, it should not land here but in object_custom(). The passed string diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re -index b3f5d29..b5f092b 100644 +index b3f5d29..cd4d53b 100644 --- a/ext/standard/var_unserializer.re +++ b/ext/standard/var_unserializer.re -@@ -400,7 +400,7 @@ static inline long object_common1(UNSERIALIZE_PARAMETER, zend_class_entry *ce) +@@ -400,7 +400,11 @@ static inline long object_common1(UNSERIALIZE_PARAMETER, zend_class_entry *ce) (*p) += 2; - if (ce->serialize == NULL) { ++ /* The internal class check here is a BC fix only, userspace classes implementing the ++ Serializable interface have eventually an inconsistent behavior at this place when ++ unserialized from a manipulated string. Additionaly the interal classes can possibly ++ crash PHP so they're still disabled here. */ + if (ce->serialize == NULL || ZEND_INTERNAL_CLASS != ce->type) { object_init_ex(*rval, ce); } else { /* If this class implements Serializable, it should not land here but in object_custom(). The passed string +-- +1.9.2 + |