Skip to content

Commit 54213b4

Browse files
committed
Disallowed JMP into a finally block.
1 parent 3248b3c commit 54213b4

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

NEWS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ PHP NEWS
33
?? ??? 2013, PHP 5.5.8
44

55
- Core:
6+
. Disallowed JMP into a finally block. (Laruence)
67
. Added validation of class names in the autoload process. (Dmitry)
78
. Fixed invalid C code in zend_strtod.c. (Lior Kaplan)
89
. Fixed bug #66041 (list() fails to unpack yielded ArrayAccess object).

Zend/zend_opcode.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -489,17 +489,22 @@ static void zend_check_finally_breakout(zend_op_array *op_array, zend_uint op_nu
489489
zend_uint i;
490490

491491
for (i = 0; i < op_array->last_try_catch; i++) {
492-
if (op_array->try_catch_array[i].try_op > op_num) {
493-
break;
494-
}
495-
if ((op_num >= op_array->try_catch_array[i].finally_op
492+
if ((op_num < op_array->try_catch_array[i].finally_op ||
493+
op_num >= op_array->try_catch_array[i].finally_end)
494+
&& (dst_num >= op_array->try_catch_array[i].finally_op &&
495+
dst_num <= op_array->try_catch_array[i].finally_end)) {
496+
CG(in_compilation) = 1;
497+
CG(active_op_array) = op_array;
498+
CG(zend_lineno) = op_array->opcodes[op_num].lineno;
499+
zend_error(E_COMPILE_ERROR, "jump into a finally block is disallowed");
500+
} else if ((op_num >= op_array->try_catch_array[i].finally_op
496501
&& op_num <= op_array->try_catch_array[i].finally_end)
497502
&& (dst_num > op_array->try_catch_array[i].finally_end
498503
|| dst_num < op_array->try_catch_array[i].finally_op)) {
499504
CG(in_compilation) = 1;
500505
CG(active_op_array) = op_array;
501506
CG(zend_lineno) = op_array->opcodes[op_num].lineno;
502-
zend_error(E_COMPILE_ERROR, "jump out of a finally block is disallowed");
507+
zend_error_noreturn(E_COMPILE_ERROR, "jump out of a finally block is disallowed");
503508
}
504509
}
505510
}

0 commit comments

Comments
 (0)