We have the crash in Zend JavaBridge, but yes it will probably occur in .com 
eather.
ther scenario  is quite simple, you just call a method in a loop. in the 
second interation, it will crash.
here is a stenario with JavaBridge :
<?php

java_require(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Persons.jar');
java_set_encoding('UTF-8');

$employeeClass = 'Employee';

$person = new java($employeeClass, "Gadi","Goldbarg",28,"male",3000,10);

for ($i =0; $i< 2; $i++) {
        try {
                $person->xxx();
        } catch (Exception $e) {
        }
}

?>

On Monday, January 30, 2012 09:24:30 AM Dmitry Stogov wrote:
> Hi,
> 
> On 01/30/2012 03:52 AM, Stas Malyshev wrote:
> > Hi!
> > 
> >> in zend_vm_execute.h:701 PHP free's the function struct in case of
> >> ZEND_OVERLOADED_FUNCTION. the problem is that in PHP 5.4, the opline
> >> calling
> >> the function hast a pointer to the very same struct in it's
> >> cache_slot. when
> >> this opcode is called againg, the cache is used and it crashes.
> > 
> > How this can be reproduced?
> 
> I would like to see the test case too as well. Is it related to
> ext/com_dotnet? It's the only extension that uses overloaded functions
> in php distribution.
> 
> >> my suggested fix is not to cache ZEND_OVERLOADED_FUNCTION, it does
> >> solve the
> >> problem and makes sense to me logically. it is also possible to not
> >> free it
> >> and let it be re-used from cache_slot.
> >> 
> >> my pacth is attached.
> > 
> > The patch should be to zend_vm_def.h since vm_execute is generated.
> > Dmitry, what do you think about this?
> 
>  From the first look the patch makes sense. Of course it should be
> applied to zend_vm_def.h.
> 
> It's possible to workaround the problem by setting ZEND_ACC_NEVER_CACHE
> in extensions, but the patch looks more robust.
> 
> Thanks. Dmitry.

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to