> Am 20.10.2015 um 17:11 schrieb Xinchen Hui <larue...@php.net>: > > Hey: > > > > On Tue, Oct 20, 2015 at 10:45 PM, Derick Rethans <der...@php.net > <mailto:der...@php.net>> wrote: > >> Hi! >> >> When hacking on Xdebug for PHP 7, I ran into some issues where PHP would >> just spin around. This happens when there is an exception, and I use >> overloaded opcodes. I wrote a small example extension at >> https://github.com/derickr/php-minimal-opcode-overloading-example with a >> test case >> ( >> https://github.com/derickr/php-minimal-opcode-overloading-example/blob/master/tests/test.php >> ) >> that shows that something is looping in executing opcodes, as the >> HANDLE_EXCEPTION iirc doesn't advance to the next opline. I believe this >> is a recent enough change, as it only started happening after I upgraded >> from about RC1 to latest master. >> >> Would you care to have a look? >> > This is introduced by a fix made by Bob, > https://github.com/php/php-src/commit/808f62bb > <https://github.com/php/php-src/commit/808f62bb> > > Bob, I am going to revert this for now, since you didn't include a test > script to show where the problem was, I am not sure why you made this? > > > thanks > >> >> cheers, >> Derick >> >> -- >> http://derickrethans.nl <http://derickrethans.nl/> | http://xdebug.org >> <http://xdebug.org/> >> Like Xdebug? Consider a donation: http://xdebug.org/donate.php >> <http://xdebug.org/donate.php> >> twitter: @derickr and @xdebug >> Posted with an email client that doesn't mangle email: alpine >> > > > > -- > Xinchen Hui > @Laruence > http://www.laruence.com/ <http://www.laruence.com/> I didn't add any test case as we don't have any APIs in php-src using that user_opcode handler. I discussed the change back then with Dmitry and committed with his review.
It concretely broke uopz which might throw an exception itself. And in turn we realized that for integrity we need to ensure that opline == EX(opline) else we'll end up with different behavior in global register builds and normal builds. In general, you should not overload ZEND_HANDLE_EXCEPTION (if you need to, have a special handling for it, but never directly dispatch to it). It is quite special being the only opcode actually allowing EG(exception) to be non-NULL at the start of it. You are doing an #ifdef ZTS to exempt it… why don't you always exempt it? Bob