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
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: andrus at wap3 dot net
New email:
PHP Version: OS:

 

 [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 12:01:33 2025 UTC