]> granicus.if.org Git - php/commitdiff
fix segfault in jdmonthname(), add test
authorAntony Dovgal <tony2001@php.net>
Tue, 11 Jul 2006 14:16:26 +0000 (14:16 +0000)
committerAntony Dovgal <tony2001@php.net>
Tue, 11 Jul 2006 14:16:26 +0000 (14:16 +0000)
ext/calendar/gregor.c
ext/calendar/tests/jdtomonthname.phpt [new file with mode: 0644]

index f48950901a60520cbe420de76fc7fecbadbaff0b..c9c0bf761b438a71bd6edf05f60dbd3a2616f74e 100644 (file)
@@ -154,6 +154,13 @@ void SdnToGregorian(
        }
        temp = (sdn + GREGOR_SDN_OFFSET) * 4 - 1;
 
+       if (temp < 0) {
+               *pYear = 0;
+               *pMonth = 0;
+               *pDay = 0;
+               return;
+       }
+
        /* Calculate the century (year/100). */
        century = temp / DAYS_PER_400_YEARS;
 
diff --git a/ext/calendar/tests/jdtomonthname.phpt b/ext/calendar/tests/jdtomonthname.phpt
new file mode 100644 (file)
index 0000000..1b5118a
--- /dev/null
@@ -0,0 +1,71 @@
+--TEST--
+jdtomonthname() test
+--SKIPIF--
+<?php if (!extension_loaded("calendar")) print "skip"; ?>
+--FILE--
+<?php
+
+$jd_days = Array(
+    2453396,
+    2440588,
+    -1,
+    array(),
+    1000000000
+    );
+
+foreach ($jd_days as $jd_day) {
+    var_dump(jdmonthname($jd_day,0));
+    var_dump(jdmonthname($jd_day,1));
+    var_dump(jdmonthname($jd_day,2));
+    var_dump(jdmonthname($jd_day,3));
+    var_dump(jdmonthname($jd_day,4));
+    var_dump(jdmonthname($jd_day,5));
+}
+
+echo "Done\n";
+
+?>
+--EXPECTF--    
+string(3) "Jan"
+string(7) "January"
+string(3) "Jan"
+string(7) "January"
+string(6) "Shevat"
+string(0) ""
+string(3) "Jan"
+string(7) "January"
+string(3) "Dec"
+string(8) "December"
+string(5) "Tevet"
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+
+Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+
+Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
+bool(false)
+string(0) ""
+string(0) ""
+string(0) ""
+string(0) ""
+string(6) "AdarII"
+string(0) ""
+Done