From:             cataphract
Operating system: Windows 7 x64
PHP version:      trunk-SVN-2010-09-28 (SVN)
Package:          Scripting Engine problem
Bug Type:         Bug
Bug description:zend_call_function does not respect ZEND_SEND_PREFER_REF

Description:
------------
The function zend_call_function interprets ZEND_SEND_PREFER_REF as if it
were ZEND_SEND_BY_REF.

Test script:
---------------
<?php

$a = 'a';

$b = 7;

echo "direct call\n";

test_passing(1, $a, 7);

echo "call via zend_call_function\n";

//separate definition to put the refcount of the third parameter=2.

//If it were 1, zend_call_function would use its special "convert

//into reference" case and wouldn't error out

//i.e., this works: call_user_func_array('test_passing', array(1, &$a,
7));

$arguments = array(1, &$a, 7);

call_user_func_array('test_passing', $arguments);



------



PHP_FUNCTION(test_passing)

{

        zval ***params;

        unsigned param_count;

        int i;



        param_count = ZEND_NUM_ARGS();

    params = emalloc(param_count * sizeof *params);

    for (i = 0; i < (int) param_count; i++) {

        params[i] = (zval **) (zend_vm_stack_top(TSRMLS_C) - 1 -
(param_count - i));

                php_printf("[%p, refcount=%u] ", *params[i],
(*params[i])->refcount__gc);

                php_var_dump(params[i], 0 TSRMLS_CC);

    }

        efree(params);

}



ZEND_BEGIN_ARG_INFO_EX(arginfo_test_passing, 0, 0, 3)

        ZEND_ARG_INFO(0, req_pass_by_val)

        ZEND_ARG_INFO(1, req_pass_by_ref)

        ZEND_ARG_INFO(2, req_prefer_ pass_by_ref)

ZEND_END_ARG_INFO()

Expected result:
----------------
Both calls would be successful.

Actual result:
--------------
Only the direct call is successful:



direct call

[0x5ddbed0, refcount=1] int(1)

[0x5ddc530, refcount=2] &string(1) "a"

[0x5ddbf20, refcount=1] int(7)

call via zend_call_function

PHP Warning:  Parameter 3 to test_passing() expected to be a reference,
value gi

ven in - on line 12

-- 
Edit bug report at http://bugs.php.net/bug.php?id=52939&edit=1
-- 
Try a snapshot (PHP 5.2):            
http://bugs.php.net/fix.php?id=52939&r=trysnapshot52
Try a snapshot (PHP 5.3):            
http://bugs.php.net/fix.php?id=52939&r=trysnapshot53
Try a snapshot (trunk):              
http://bugs.php.net/fix.php?id=52939&r=trysnapshottrunk
Fixed in SVN:                        
http://bugs.php.net/fix.php?id=52939&r=fixed
Fixed in SVN and need be documented: 
http://bugs.php.net/fix.php?id=52939&r=needdocs
Fixed in release:                    
http://bugs.php.net/fix.php?id=52939&r=alreadyfixed
Need backtrace:                      
http://bugs.php.net/fix.php?id=52939&r=needtrace
Need Reproduce Script:               
http://bugs.php.net/fix.php?id=52939&r=needscript
Try newer version:                   
http://bugs.php.net/fix.php?id=52939&r=oldversion
Not developer issue:                 
http://bugs.php.net/fix.php?id=52939&r=support
Expected behavior:                   
http://bugs.php.net/fix.php?id=52939&r=notwrong
Not enough info:                     
http://bugs.php.net/fix.php?id=52939&r=notenoughinfo
Submitted twice:                     
http://bugs.php.net/fix.php?id=52939&r=submittedtwice
register_globals:                    
http://bugs.php.net/fix.php?id=52939&r=globals
PHP 4 support discontinued:          http://bugs.php.net/fix.php?id=52939&r=php4
Daylight Savings:                    http://bugs.php.net/fix.php?id=52939&r=dst
IIS Stability:                       
http://bugs.php.net/fix.php?id=52939&r=isapi
Install GNU Sed:                     
http://bugs.php.net/fix.php?id=52939&r=gnused
Floating point limitations:          
http://bugs.php.net/fix.php?id=52939&r=float
No Zend Extensions:                  
http://bugs.php.net/fix.php?id=52939&r=nozend
MySQL Configuration Error:           
http://bugs.php.net/fix.php?id=52939&r=mysqlcfg

Reply via email to