cataphract                               Tue, 27 Sep 2011 10:57:25 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=317387

Log:
- 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.

Bug: https://bugs.php.net/55797 (Closed) Integer overflow in SdnToGregorian 
leads to segfault (in optimized builds)
      
Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/ext/calendar/gregor.c
    A   php/php-src/branches/PHP_5_3/ext/calendar/tests/bug55797_1.phpt
    A   php/php-src/branches/PHP_5_3/ext/calendar/tests/bug55797_2.phpt
    U   php/php-src/branches/PHP_5_4/ext/calendar/gregor.c
    A   php/php-src/branches/PHP_5_4/ext/calendar/tests/bug55797_1.phpt
    A   php/php-src/branches/PHP_5_4/ext/calendar/tests/bug55797_2.phpt
    U   php/php-src/trunk/ext/calendar/gregor.c
    A   php/php-src/trunk/ext/calendar/tests/bug55797_1.phpt
    A   php/php-src/trunk/ext/calendar/tests/bug55797_2.phpt

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS	2011-09-27 10:56:44 UTC (rev 317386)
+++ php/php-src/branches/PHP_5_3/NEWS	2011-09-27 10:57:25 UTC (rev 317387)
@@ -26,6 +26,10 @@
     (Hannes)
   . Fixed bug #50982 (incorrect assumption of PAGE_SIZE size). (Dmitry)

+- Calendar:
+  . Fixed bug #55797 (Integer overflow in SdnToGregorian leads to segfault (in
+    optimized builds). (Gustavo)
+
 - Curl:
   . Fixed bug #54798 (Segfault when CURLOPT_STDERR file pointer is closed
     before calling curl_exec). (Hannes)

Modified: php/php-src/branches/PHP_5_3/ext/calendar/gregor.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/calendar/gregor.c	2011-09-27 10:56:44 UTC (rev 317386)
+++ php/php-src/branches/PHP_5_3/ext/calendar/gregor.c	2011-09-27 10:57:25 UTC (rev 317387)
@@ -153,10 +153,6 @@
 	}
 	temp = (sdn + GREGOR_SDN_OFFSET) * 4 - 1;

-	if (temp < 0) {
-		goto fail;
-	}
-
 	/* Calculate the century (year/100). */
 	century = temp / DAYS_PER_400_YEARS;


Added: php/php-src/branches/PHP_5_3/ext/calendar/tests/bug55797_1.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/calendar/tests/bug55797_1.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/calendar/tests/bug55797_1.phpt	2011-09-27 10:57:25 UTC (rev 317387)
@@ -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) ""
+}
+


Property changes on: php/php-src/branches/PHP_5_3/ext/calendar/tests/bug55797_1.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Added: php/php-src/branches/PHP_5_3/ext/calendar/tests/bug55797_2.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/calendar/tests/bug55797_2.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/calendar/tests/bug55797_2.phpt	2011-09-27 10:57:25 UTC (rev 317387)
@@ -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) ""
+}
+


Property changes on: php/php-src/branches/PHP_5_3/ext/calendar/tests/bug55797_2.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Modified: php/php-src/branches/PHP_5_4/ext/calendar/gregor.c
===================================================================
--- php/php-src/branches/PHP_5_4/ext/calendar/gregor.c	2011-09-27 10:56:44 UTC (rev 317386)
+++ php/php-src/branches/PHP_5_4/ext/calendar/gregor.c	2011-09-27 10:57:25 UTC (rev 317387)
@@ -153,10 +153,6 @@
 	}
 	temp = (sdn + GREGOR_SDN_OFFSET) * 4 - 1;

-	if (temp < 0) {
-		goto fail;
-	}
-
 	/* Calculate the century (year/100). */
 	century = temp / DAYS_PER_400_YEARS;


Added: php/php-src/branches/PHP_5_4/ext/calendar/tests/bug55797_1.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/calendar/tests/bug55797_1.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_4/ext/calendar/tests/bug55797_1.phpt	2011-09-27 10:57:25 UTC (rev 317387)
@@ -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) ""
+}
+


Property changes on: php/php-src/branches/PHP_5_4/ext/calendar/tests/bug55797_1.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Added: php/php-src/branches/PHP_5_4/ext/calendar/tests/bug55797_2.phpt
===================================================================
--- php/php-src/branches/PHP_5_4/ext/calendar/tests/bug55797_2.phpt	                        (rev 0)
+++ php/php-src/branches/PHP_5_4/ext/calendar/tests/bug55797_2.phpt	2011-09-27 10:57:25 UTC (rev 317387)
@@ -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) ""
+}
+


Property changes on: php/php-src/branches/PHP_5_4/ext/calendar/tests/bug55797_2.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Modified: php/php-src/trunk/ext/calendar/gregor.c
===================================================================
--- php/php-src/trunk/ext/calendar/gregor.c	2011-09-27 10:56:44 UTC (rev 317386)
+++ php/php-src/trunk/ext/calendar/gregor.c	2011-09-27 10:57:25 UTC (rev 317387)
@@ -153,10 +153,6 @@
 	}
 	temp = (sdn + GREGOR_SDN_OFFSET) * 4 - 1;

-	if (temp < 0) {
-		goto fail;
-	}
-
 	/* Calculate the century (year/100). */
 	century = temp / DAYS_PER_400_YEARS;


Added: php/php-src/trunk/ext/calendar/tests/bug55797_1.phpt
===================================================================
--- php/php-src/trunk/ext/calendar/tests/bug55797_1.phpt	                        (rev 0)
+++ php/php-src/trunk/ext/calendar/tests/bug55797_1.phpt	2011-09-27 10:57:25 UTC (rev 317387)
@@ -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) ""
+}
+


Property changes on: php/php-src/trunk/ext/calendar/tests/bug55797_1.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native

Added: php/php-src/trunk/ext/calendar/tests/bug55797_2.phpt
===================================================================
--- php/php-src/trunk/ext/calendar/tests/bug55797_2.phpt	                        (rev 0)
+++ php/php-src/trunk/ext/calendar/tests/bug55797_2.phpt	2011-09-27 10:57:25 UTC (rev 317387)
@@ -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) ""
+}
+


Property changes on: php/php-src/trunk/ext/calendar/tests/bug55797_2.phpt
___________________________________________________________________
Added: svn:keywords
   + Id Rev Revision
Added: svn:eol-style
   + native
-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to