- Added tests and NEWS for r306475; see bug #55797.

- Removed now redundant previous overflow check, which relied on
  undefined behavior (wraparound) and was ignored in optimized builds.
This commit is contained in:
Gustavo André dos Santos Lopes 2011-09-27 10:57:25 +00:00
parent 38d485ca41
commit 5ae7564890
3 changed files with 72 additions and 4 deletions

View File

@ -153,10 +153,6 @@ void SdnToGregorian(
}
temp = (sdn + GREGOR_SDN_OFFSET) * 4 - 1;
if (temp < 0) {
goto fail;
}
/* Calculate the century (year/100). */
century = temp / DAYS_PER_400_YEARS;

View File

@ -0,0 +1,36 @@
--TEST--
Bug #55797: Integer overflow in SdnToGregorian leads to segfault (in optimized builds)
--SKIPIF--
<?php
include 'skipif.inc';
if (PHP_INT_SIZE != 4) {
die("skip this test is for 32bit platform only");
}
?>
--FILE--
<?php
$x = 882858030;
var_dump(cal_from_jd($x, CAL_GREGORIAN));
--EXPECTF--
array(9) {
["date"]=>
string(5) "0/0/0"
["month"]=>
int(0)
["day"]=>
int(0)
["year"]=>
int(0)
["dow"]=>
int(%d)
["abbrevdayname"]=>
string(%d) "%s"
["dayname"]=>
string(%d) "%s"
["abbrevmonth"]=>
string(0) ""
["monthname"]=>
string(0) ""
}

View File

@ -0,0 +1,36 @@
--TEST--
Bug #55797: Integer overflow in SdnToGregorian leads to segfault (in optimized builds)
--SKIPIF--
<?php
include 'skipif.inc';
if (PHP_INT_SIZE == 4) {
die("skip this test is for 64bit platform only");
}
?>
--FILE--
<?php
$x = 9223372036854743639;
var_dump(cal_from_jd($x, CAL_GREGORIAN));
--EXPECTF--
array(9) {
["date"]=>
string(5) "0/0/0"
["month"]=>
int(0)
["day"]=>
int(0)
["year"]=>
int(0)
["dow"]=>
int(%d)
["abbrevdayname"]=>
string(%d) "%s"
["dayname"]=>
string(%d) "%s"
["abbrevmonth"]=>
string(0) ""
["monthname"]=>
string(0) ""
}