php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #35367 php exits (crashes?) on function call inside same function
Submitted: 2005-11-24 15:55 UTC Modified: 2005-11-27 14:44 UTC
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:0 of 0 (0.0%)
From: andrus at wap3 dot net Assigned:
Status: Not a bug Package: Unknown/Other Function
PHP Version: 5.1.0, 4.4.1 OS: Debian Linux
Private report: No CVE-ID: None
 [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

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-11-24 16:19 UTC] tony2001@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a backtrace to see what is happening behind the scenes. To
find out how to generate a backtrace, please read
http://bugs.php.net/bugs-generating-backtrace.php

Once you have generated a backtrace, please submit it to this bug
report and change the status back to "Open". Thank you for helping
us make PHP better.

I can't see any crashes or exits with this code.
 [2005-11-27 10:22 UTC] andrus at wap3 dot net
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.
 [2005-11-27 10:34 UTC] andrus at wap3 dot net
tested also on 5.1.0, same result
 [2005-11-27 10:59 UTC] andrus at wap3 dot net
tested with latest snapshot, same result
 [2005-11-27 14:02 UTC] tony2001@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a backtrace to see what is happening behind the scenes. To
find out how to generate a backtrace, please read
http://bugs.php.net/bugs-generating-backtrace.php

Once you have generated a backtrace, please submit it to this bug
report and change the status back to "Open". Thank you for helping
us make PHP better.


 [2005-11-27 14:31 UTC] andrus at wap3 dot net
#0  execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1097
#1  0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#2  0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#3  0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#4  0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#5  0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#6  0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#7  0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#8  0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#9  0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#10 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#11 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#12 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#13 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
#14 0x081f18c5 in execute (op_array=0x83f78e8) at /root/php4-STABLE-200511270752/Zend/zend_execute.c:1719
 [2005-11-27 14:32 UTC] andrus at wap3 dot net
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}
 [2005-11-27 14:37 UTC] tony2001@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

You have an endless recursion somewhere in your code.
 [2005-11-27 14:39 UTC] andrus at wap3 dot net
bah, did you look the code at all (test.php and test2.php)?
 [2005-11-27 14:44 UTC] andrus at wap3 dot net
nevermind,i found
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Thu Jul 10 06:01:34 2025 UTC