From cfd104582220d578ab1b78a5991065d038e1f931 Mon Sep 17 00:00:00 2001 From: Sara Golemon Date: Thu, 16 May 2013 14:37:36 -0700 Subject: [PATCH] Add optional second arg to unserialize() Returns the number of bytes consumed by reference for streaming unserialization. Actual unserialization behavior is not modified at all. The need for this came up while trying to parse SplDoublyLinkedList's serialization format which uses a non-standard stream of serialized values. --- ext/standard/basic_functions.c | 1 + .../serialize/serialization_error_001.phpt | 6 ++--- .../tests/serialize/unserialize_consumed.phpt | 27 +++++++++++++++++++ ext/standard/var.c | 10 +++++-- 4 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 ext/standard/tests/serialize/unserialize_consumed.phpt diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 9c91404eff..1379117745 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -2679,6 +2679,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_unserialize, 0) ZEND_ARG_INFO(0, variable_representation) + ZEND_ARG_INFO(1, consumed) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_memory_get_usage, 0, 0, 0) diff --git a/ext/standard/tests/serialize/serialization_error_001.phpt b/ext/standard/tests/serialize/serialization_error_001.phpt index da6f50cc02..c6c17512f3 100644 --- a/ext/standard/tests/serialize/serialization_error_001.phpt +++ b/ext/standard/tests/serialize/serialization_error_001.phpt @@ -21,7 +21,7 @@ var_dump( unserialize() ); //Test serialize with one more than the expected number of arguments var_dump( serialize(1,2) ); -var_dump( unserialize(1,2) ); +var_dump( unserialize(1,$x,2) ); echo "Done"; ?> @@ -31,12 +31,12 @@ echo "Done"; Warning: serialize() expects exactly 1 parameter, 0 given in %s on line 16 NULL -Warning: unserialize() expects exactly 1 parameter, 0 given in %s on line 17 +Warning: unserialize() expects at least 1 parameter, 0 given in %s on line 17 bool(false) Warning: serialize() expects exactly 1 parameter, 2 given in %s on line 20 NULL -Warning: unserialize() expects exactly 1 parameter, 2 given in %s on line 21 +Warning: unserialize() expects at most 2 parameters, 3 given in %s on line 21 bool(false) Done diff --git a/ext/standard/tests/serialize/unserialize_consumed.phpt b/ext/standard/tests/serialize/unserialize_consumed.phpt new file mode 100644 index 0000000000..6cc11e273f --- /dev/null +++ b/ext/standard/tests/serialize/unserialize_consumed.phpt @@ -0,0 +1,27 @@ +--TEST-- +Unserialization of partial strings +--FILE-- +