|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2005-11-24 15:55 UTC] andrus at wap3 dot net
Description:
------------
Function terminates while calling itself from itself inside class
Reproduce code:
---------------
make class:
class test {
function foo ($a = 0) {
$a++;
if ($a < 10)
$a = $this->foo ($a);
return $a;
}
}
use it:
$a = new test;
print $a->foo (1);
Expected result:
----------------
any result, not termination
Actual result:
--------------
php script terminates on $this->foo place
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Dec 02 16:00:02 2025 UTC |
bug was not just class related, but seems general recrussion related: following code produced crash on 3 server i tested: file1: test.php <?php error_reporting (E_ALL); require ("test2.php"); $im_resize_res_max = '1600x1200'; $im_resize_res_min = '120x120'; resolution_check ("1x1", "2x2"); print "OK"; ?> file2: test2.php <?php /* check if $res1 is fits inside $res2 */ function resolution_check ($res1 = '', $res2 = '') { global $im_resize_res_max, $im_resize_res_min; if (!strchr ($res1, 'x') || !strchr ($res2, 'x')) // invalid resolutions return -1; // check if not too big or too small image if (resolution_check ($res1, $im_resize_res_max) != 1) return -2; if (resolution_check ($res1, $im_resize_res_min) == 1) return -3; list ($x1, $y1) = explode ('x', $res1, 2); list ($x2, $y2) = explode ('x', $res2, 2); $x1 = (int) $x1; $x2 = (int) $x2; $y1 = (int) $y1; $y2 = (int) $y2; if ($x1 <= 0 || $x2 <= 0 || $y1 <= 0 || $y2 <= 0) // invalid return -1; if ($x2 >= $x1 && $y2 >= $y1) // match return 1; return 0; } ?> when i run test.php it never completes. same time if i copy this function to same source file it worked. Unfortunately i dont have gdb access right now. If you cannot reporduce it i will deal with administration about it.bt full #0 execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1097 execute_data = {opline = 0x83f88fc, function_state = {function_symbol_table = 0x0, function = 0x83f78e8, reserved = {0x20, 0x865e5c4, 0x838c7fc, 0xbf269728}}, fbc = 0x0, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf268dec, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26a030} #1 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865e2b4 original_return_value = (zval **) 0xbf26a254 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865e564, function = 0x83f78e8, reserved = {0x20, 0x865e314, 0x838c7fc, 0xbf26a088}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26974c, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26a990} #2 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865e004 original_return_value = (zval **) 0xbf26abb4 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865e2b4, function = 0x83f78e8, reserved = {0x20, 0x865e064, 0x838c7fc, 0xbf26a9e8}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26a0ac, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26b2f0} #3 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865dd54 original_return_value = (zval **) 0xbf26b514 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865e004, function = 0x83f78e8, reserved = {0x20, 0x865ddb4, 0x838c7fc, 0xbf26b348}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26aa0c, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26bc50} #4 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865daa4 original_return_value = (zval **) 0xbf26be74 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865dd54, function = 0x83f78e8, reserved = {0x20, 0x865db04, 0x838c7fc, 0xbf26bca8}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26b36c, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26c5b0} #5 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865d7f4 original_return_value = (zval **) 0xbf26c7d4 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865daa4, function = 0x83f78e8, reserved = {0x20, 0x865d854, 0x838c7fc, 0xbf26c608}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26bccc, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26cf10} #6 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865d544 original_return_value = (zval **) 0xbf26d134 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865d7f4, function = 0x83f78e8, reserved = {0x20, 0x865d5a4, 0x838c7fc, 0xbf26cf68}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26c62c, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26d870} #7 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865d294 original_return_value = (zval **) 0xbf26da94 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865d544, function = 0x83f78e8, reserved = {0x20, 0x865d2f4, 0x838c7fc, 0xbf26d8c8}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26cf8c, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26e1d0} #8 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865cfe4 original_return_value = (zval **) 0xbf26e3f4 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865d294, function = 0x83f78e8, reserved = {0x20, 0x865d044, 0x838c7fc, 0xbf26e228}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26d8ec, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26eb30} #9 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865cd34 original_return_value = (zval **) 0xbf26ed54 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865cfe4, function = 0x83f78e8, reserved = {0x20, 0x865cd94, 0x838c7fc, 0xbf26eb88}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26e24c, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26f490} #10 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865ca84 original_return_value = (zval **) 0xbf26f6b4 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865cd34, function = 0x83f78e8, reserved = {0x20, 0x865cae4, 0x838c7fc, 0xbf26f4e8}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26ebac, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf26fdf0} #11 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719 calling_symbol_table = (HashTable *) 0x865c7d4 original_return_value = (zval **) 0xbf270014 return_value_used = 1 execute_data = {opline = 0x83f9040, function_state = {function_symbol_table = 0x865ca84, function = 0x83f78e8, reserved = {0x20, 0x865c834, 0x838c7fc, 0xbf26fe48}}, fbc = 0x83f78e8, ce = 0x0, object = {ptr = 0x0}, Ts = 0xbf26f50c, original_in_execution = 1 '\001', op_array = 0x83f78e8, prev_execute_data = 0xbf270750}