Hi! > Please add a note to UPGRADING as well. > > Thanks!
I understand UPGRADING still not updated? Could you please update it? > Cheers, > > On Fri, May 17, 2013 at 12:18 AM, Sara Golemon <poll...@php.net> wrote: >> Commit: cfd104582220d578ab1b78a5991065d038e1f931 >> Author: Sara Golemon <poll...@php.net> Thu, 16 May 2013 14:37:36 >> -0700 >> Parents: bc656cde0453aa6de50812ba9edfc6f74c61ce37 >> Branches: master >> >> Link: >> http://git.php.net/?p=php-src.git;a=commitdiff;h=cfd104582220d578ab1b78a5991065d038e1f931 >> >> Log: >> 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. >> >> Changed paths: >> M ext/standard/basic_functions.c >> M ext/standard/tests/serialize/serialization_error_001.phpt >> A ext/standard/tests/serialize/unserialize_consumed.phpt >> M ext/standard/var.c >> >> >> Diff: >> diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c >> index 9c91404..1379117 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 da6f50c..c6c1751 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 0000000..6cc11e2 >> --- /dev/null >> +++ b/ext/standard/tests/serialize/unserialize_consumed.phpt >> @@ -0,0 +1,27 @@ >> +--TEST-- >> +Unserialization of partial strings >> +--FILE-- >> +<?php >> +$data = [123,4.56,true]; >> +$ser = serialize($data); >> +$serlen = strlen($ser); >> + >> +$unser = unserialize($ser, $consumed); >> +echo "Consume full string: "; >> +var_dump($serlen == $consumed); >> +echo "Return original data: "; >> +var_dump($unser === $data); >> + >> +$ser .= "junk\x01data"; >> +$unser = unserialize($ser, $consumed); >> +echo "Consume full string(junk): "; >> +var_dump($serlen == $consumed); >> +echo "Return original data(junk): "; >> +var_dump($unser === $data); >> + >> +--EXPECT-- >> +Consume full string: bool(true) >> +Return original data: bool(true) >> +Consume full string(junk): bool(true) >> +Return original data(junk): bool(true) >> + >> diff --git a/ext/standard/var.c b/ext/standard/var.c >> index f76a14c..4acc6f5 100644 >> --- a/ext/standard/var.c >> +++ b/ext/standard/var.c >> @@ -945,7 +945,7 @@ PHP_FUNCTION(serialize) >> } >> /* }}} */ >> >> -/* {{{ proto mixed unserialize(string variable_representation) >> +/* {{{ proto mixed unserialize(string variable_representation[, int >> &consumed]) >> Takes a string representation of variable and recreates it */ >> PHP_FUNCTION(unserialize) >> { >> @@ -953,8 +953,9 @@ PHP_FUNCTION(unserialize) >> int buf_len; >> const unsigned char *p; >> php_unserialize_data_t var_hash; >> + zval *consumed = NULL; >> >> - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, >> &buf_len) == FAILURE) { >> + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &buf, >> &buf_len, &consumed) == FAILURE) { >> RETURN_FALSE; >> } >> >> @@ -973,6 +974,11 @@ PHP_FUNCTION(unserialize) >> RETURN_FALSE; >> } >> PHP_VAR_UNSERIALIZE_DESTROY(var_hash); >> + >> + if (consumed) { >> + zval_dtor(consumed); >> + ZVAL_LONG(consumed, ((char*)p) - buf); >> + } >> } >> /* }}} */ >> >> >> -- >> PHP CVS Mailing List (http://www.php.net/) >> To unsubscribe, visit: http://www.php.net/unsub.php >> > > > -- Stanislav Malyshev, Software Architect SugarCRM: http://www.sugarcrm.com/ (408)454-6900 ext. 227 -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php