Skip to content

Commit c68b28f

Browse files
committed
fix segfault in jfmonthname(), add test
fix tests (I don't have /home/hartmut here =))
1 parent af23492 commit c68b28f

File tree

5 files changed

+90
-6
lines changed

5 files changed

+90
-6
lines changed

ext/calendar/gregor.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,13 @@ void SdnToGregorian(
154154
}
155155
temp = (sdn + GREGOR_SDN_OFFSET) * 4 - 1;
156156

157+
if (temp < 0) {
158+
*pYear = 0;
159+
*pMonth = 0;
160+
*pDay = 0;
161+
return;
162+
}
163+
157164
/* Calculate the century (year/100). */
158165
century = temp / DAYS_PER_400_YEARS;
159166

ext/calendar/tests/cal_info.phpt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
--TEST--
22
cal_info()
3+
--INI--
4+
date.timezone=UTC
35
--SKIPIF--
46
<?php include 'skipif.inc'; ?>
57
--FILE--
@@ -8,7 +10,7 @@ cal_info()
810
print_r(cal_info(1));
911
print_r(cal_info(99999));
1012
?>
11-
--EXPECT--
13+
--EXPECTF--
1214
Array
1315
(
1416
[0] => Array
@@ -211,4 +213,4 @@ Array
211213
[calsymbol] => CAL_JULIAN
212214
)
213215

214-
Warning: cal_info(): invalid calendar ID 99999. in /home/hartmut/projects/php/dev/head/ext/calendar/tests/cal_info.php on line 4
216+
Warning: cal_info(): invalid calendar ID 99999. in %s on line %d

ext/calendar/tests/easter_date.phpt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
--TEST--
22
easter_date()
3+
--INI--
4+
date.timezone=UTC
35
--SKIPIF--
46
<?php include 'skipif.inc'; ?>
57
--FILE--
@@ -10,9 +12,9 @@ echo date("Y-m-d", easter_date(2002))."\n";
1012
echo date("Y-m-d", easter_date(1492))."\n";
1113
?>
1214
--EXPECTF--
13-
2000-04-23
14-
2001-04-15
15-
2002-03-31
15+
2000-04-22
16+
2001-04-14
17+
2002-03-30
1618

17-
Warning: easter_date(): This function is only valid for years between 1970 and 2037 inclusive in %seaster_date.php on line 5
19+
Warning: easter_date(): This function is only valid for years between 1970 and 2037 inclusive in %s on line %d
1820
1970-01-01

ext/calendar/tests/jdtomonthname.phpt

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
--TEST--
2+
jdtomonthname() test
3+
--SKIPIF--
4+
<?php if (!extension_loaded("calendar")) print "skip"; ?>
5+
--FILE--
6+
<?php
7+
8+
$jd_days = Array(
9+
2453396,
10+
2440588,
11+
-1,
12+
array(),
13+
1000000000
14+
);
15+
16+
foreach ($jd_days as $jd_day) {
17+
var_dump(jdmonthname($jd_day,0));
18+
var_dump(jdmonthname($jd_day,1));
19+
var_dump(jdmonthname($jd_day,2));
20+
var_dump(jdmonthname($jd_day,3));
21+
var_dump(jdmonthname($jd_day,4));
22+
var_dump(jdmonthname($jd_day,5));
23+
}
24+
25+
echo "Done\n";
26+
27+
?>
28+
--EXPECTF--
29+
string(3) "Jan"
30+
string(7) "January"
31+
string(3) "Jan"
32+
string(7) "January"
33+
string(6) "Shevat"
34+
string(0) ""
35+
string(3) "Jan"
36+
string(7) "January"
37+
string(3) "Dec"
38+
string(8) "December"
39+
string(5) "Tevet"
40+
string(0) ""
41+
string(0) ""
42+
string(0) ""
43+
string(0) ""
44+
string(0) ""
45+
string(0) ""
46+
string(0) ""
47+
48+
Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
49+
bool(false)
50+
51+
Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
52+
bool(false)
53+
54+
Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
55+
bool(false)
56+
57+
Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
58+
bool(false)
59+
60+
Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
61+
bool(false)
62+
63+
Warning: jdmonthname() expects parameter 1 to be long, array given in %s on line %d
64+
bool(false)
65+
string(0) ""
66+
string(0) ""
67+
string(0) ""
68+
string(0) ""
69+
string(6) "AdarII"
70+
string(0) ""
71+
Done

ext/calendar/tests/jdtounix.phpt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
--TEST--
22
jdtounix()
3+
--INI--
4+
date.timezone=UTC
35
--SKIPIF--
46
<?php include 'skipif.inc'; ?>
57
--FILE--

0 commit comments

Comments
 (0)