Bug #53717 [Opn->Csd]: checking the number of arguments is wrong in zend_parse_method_parameters_ex()
| From: | felipe@php.net | Date: | Wed, 12 Jan 2011 22:18:04 +0000 |
| Subject: | Bug #53717 [Opn->Csd]: checking the number of arguments is wrong in zend_parse_method_parameters_ex() | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-157872@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=53717&edit=1
ID: 53717
Updated by: felipe@php.net
Reported by: klaus at triendl dot eu
Summary: checking the number of arguments is wrong in
zend_parse_method_parameters_ex()
-Status: Open
+Status: Closed
Type: Bug
Package: Scripting Engine problem
PHP Version: 5.3.5
-Assigned To:
+Assigned To: felipe
Block user comment: N
Private report: N
New Comment:
This bug has been fixed in SVN.
Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
Thank you for the report, and for helping us make PHP better.
Previous Comments:
------------------------------------------------------------------------
[2011-01-12 23:17:12] felipe@php.net
Automatic comment from SVN on behalf of felipe
Revision: http://svn.php.net/viewvc/?view=revision&revision=307424
Log: - Fixed bug #53717 (checking the number of arguments is wrong in
zend_parse_method_parameters_ex())
patch by: klaus at triendl dot eu
------------------------------------------------------------------------
[2011-01-12 10:05:50] klaus at triendl dot eu
Description:
------------
Starting with PHP 5.3.0, zend_parse_method_parameters() and
zend_parse_method_parameters_ex() check the number of passed arguments
not to be 0.
However, zend_parse_method_parameters_ex() passes num_args-1 to
RETURN_IF_ZERO_ARGS, yielding immediate function return with return code
FAILURE - checking the passed arguments fails incorrectly.
See the 'test script' code for an idea how the problem scenario looks
like.
Note: the code for the 'test script' isn't php script code but rather
C++ code for a class exposed from a custom php extension.
Test script:
---------------
/* {{{ proto void MySample::__destruct() */
ZEND_METHOD(mysample_class, __destruct)
{
zval* objid;
#if 1 // fails: zend_parse_method_parameters_ex() returns FAILURE
if (zend_parse_method_parameters_ex(0, ZEND_NUM_ARGS() TSRMLS_CC,
getThis(), "O", &objid, mysample_class_entry) == FAILURE)
return;
#else // ... whereas zend_parse_method_parameters() returns SUCCESS
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(),
"O", &objid, mysample_class_entry) == FAILURE)
return;
#endif
mysample_class* pobj = (mysample_class*)
zend_object_store_get_object(objid TSRMLS_CC);
// ...
}
/* }}} */
Expected result:
----------------
zend_parse_method_parameters_ex() should return SUCCESS just as
zend_parse_method_parameters() does
Actual result:
--------------
zend_parse_method_parameters_ex() returns FAILURE
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=53717&edit=1