php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Doc Bug #28827 The example PHP code in docs http://php.net/gmp/ crashes PHP
Submitted: 2004-06-18 12:23 UTC Modified: 2005-01-11 18:20 UTC
From: valyala at tut dot by Assigned:
Status: Closed Package: Documentation problem
PHP Version: 4.3.7 OS: any
Private report: No CVE-ID: None
 [2004-06-18 12:23 UTC] valyala at tut dot by
Description:
------------
The following example code, which "will calculate factorial of 1000 (pretty big number) very fast" on documentation page http://php.net/gmp/ crashes PHP.
-------------------------------
<?php
function fact($x) 
{
    if ($x <= 1) {
        return 1;
    } else {
        return gmp_mul($x, fact($x-1));
    }
}

echo gmp_strval(fact(1000)) . "\n";
?> 
-------------------------------

The next PHP code avoids the crash:
-------------------------------
<?php
function fact($x) {
  $result = 1;
  while ($x > 1) {
    $result = gmp_mul($result, $x--);
  }
  return $result;
}

echo gmp_strval(fact(1000)) . "\n";
}
?>
-------------------------------

This bug related to the following bugs: #7720, #15522, #26212.
It seems that PHP4.3.7 (and older) don't handle stack overflow during function calls.
You can find the maximum recursion depth for your version of PHP independently. Just play with $rec_depth number in the following script:
---------------------------
<?php
function f($n) {
  if (--$n) f($n);
}

/* adjust this number to find the
   maximum recursion depth
*/
$rec_depth = 1000;
f($rec_depth);
?>
---------------------------

p.s. Are the volunteers in PHP developement team, who wanted to track stack overflow problem?


Reproduce code:
---------------
see above

Expected result:
----------------
decimal view of 1000!

Actual result:
--------------
PHP crash

Patches

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-06-18 12:40 UTC] tony2001@php.net
The example from docs works perfectly with latest PHP5 & PHP4.

Concerning stack overflows, read php-dev archives.
For example this post:
http://lists.php.net/article.php?group=php.internals&article=8851
and all the tread:
http://lists.php.net/article.php?group=php.internals&article=8840

Short version: this is expected behaviour.
 [2004-06-28 01:00 UTC] phpdoc at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 [2005-01-11 18:20 UTC] vrana@php.net
This bug has been fixed in the documentation's XML sources. Since the
online and downloadable versions of the documentation need some time
to get updated, we would like to ask you to be a bit patient.

Thank you for the report, and for helping us make our documentation better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Aug 17 05:01:29 2024 UTC