Merge branch 'PHP-5.5'

This commit is contained in:
Xinchen Hui 2013-09-16 14:43:13 +08:00
commit e53e79c701
2 changed files with 126 additions and 4 deletions

View File

@ -1283,11 +1283,15 @@ static void assemble_code_blocks(zend_cfg *cfg, zend_op_array *op_array)
/* adjust exception jump targets */
if (op_array->last_try_catch) {
int i;
for (i = 0; i< op_array->last_try_catch; i++) {
op_array->try_catch_array[i].try_op = cfg->try[i]->start_opline - new_opcodes;
op_array->try_catch_array[i].catch_op = cfg->catch[i]->start_opline - new_opcodes;
int i, j;
for (i = 0, j = 0; i< op_array->last_try_catch; i++) {
if (cfg->try[i]->access) {
op_array->try_catch_array[j].try_op = cfg->try[i]->start_opline - new_opcodes;
op_array->try_catch_array[j].catch_op = cfg->catch[i]->start_opline - new_opcodes;
j++;
}
}
op_array->last_try_catch = j;
efree(cfg->try);
efree(cfg->catch);
}

View File

@ -0,0 +1,118 @@
--TEST--
Bug #65665 (Exception not properly caught when opcache enabled)
--INI--
opcache.enable=1
opcache.enable_cli=1
--SKIPIF--
<?php require_once('skipif.inc'); ?>
--FILE--
<?php
function foo() {
try
{
switch (1)
{
case 0:
try
{
}
catch (Exception $e)
{
}
break;
case 1:
try
{
throw new Exception('aaa');
}
catch (Exception $e)
{
echo "correct\n";
}
break;
}
}
catch (Exception $e)
{
echo "wrong\n";
}
return;
}
function foo1() {
try
{
switch (1)
{
case 0:
try
{
}
catch (Exception $e)
{
dummy:
echo "ect\n";
}
break;
case 1:
try
{
throw new Exception('aaa');
}
catch (Exception $e)
{
echo "corr";
goto dummy;
}
break;
}
}
catch (Exception $e)
{
echo "wrong\n";
}
return;
}
function foo2() {
try
{
switch (1)
{
case 0:
try
{
dummy:
throw new Exception('aaa');
}
catch (Exception $e)
{
echo "correct\n";
}
break;
case 1:
goto dummy;
break;
}
}
catch (Exception $e)
{
echo "wrong\n";
}
return;
}
foo();foo1();foo2();
--EXPECT--
correct
correct
correct