summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmb@php.net>2016-07-28 19:13:58 +0200
committerChristoph M. Becker <cmb@php.net>2016-07-28 19:13:58 +0200
commit7ab39e2faef499c8a1857205fa332d2e38a0a584 (patch)
tree8f67cdbebf3b0a144ce843404be898fd1cd04cad
parentced2a80e6f6f023ab732d10076c89d177403a7fb (diff)
downloadphp-git-7ab39e2faef499c8a1857205fa332d2e38a0a584.tar.gz
Fix #67976: cal_days_month() fails for final month of the French calendar
The French calendar ends on 0014-13-05, so trying to calculate the Julian day of 0015-01-01 fails. We cater to that by returning the hard-coded value.
-rw-r--r--NEWS4
-rw-r--r--ext/calendar/calendar.c4
-rw-r--r--ext/calendar/tests/bug67976.phpt12
3 files changed, 20 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index b03e691a33..98e9d42028 100644
--- a/NEWS
+++ b/NEWS
@@ -11,6 +11,10 @@ PHP NEWS
. Fixed bug #72641 (phpize (on Windows) ignores PHP_PREFIX).
(Yuji Uchiyama)
+- Calendar:
+ . Fixed bug #67976 (cal_days_month() fails for final month of the French
+ calendar). (cmb)
+
- Curl:
. Fixed bug #71144 (Segmentation fault when using cURL with ZTS).
(maroszek at gmx dot net)
diff --git a/ext/calendar/calendar.c b/ext/calendar/calendar.c
index 74478e8b93..1f92b9f2e0 100644
--- a/ext/calendar/calendar.c
+++ b/ext/calendar/calendar.c
@@ -359,6 +359,10 @@ PHP_FUNCTION(cal_days_in_month)
}
else {
sdn_next = calendar->to_jd(year + 1, 1, 1);
+ if (cal == CAL_FRENCH && sdn_next == 0) {
+ /* The French calendar ends on 0014-13-05. */
+ sdn_next = 2380953;
+ }
}
}
diff --git a/ext/calendar/tests/bug67976.phpt b/ext/calendar/tests/bug67976.phpt
new file mode 100644
index 0000000000..74e0bc81b1
--- /dev/null
+++ b/ext/calendar/tests/bug67976.phpt
@@ -0,0 +1,12 @@
+--TEST--
+Bug #67976 (cal_days_month() fails for final month of the French calendar)
+--SKIPIF--
+<?php
+if (!extension_loaded('calendar')) die('skip ext/calendar required');
+?>
+--FILE--
+<?php
+var_dump(cal_days_in_month(CAL_FRENCH, 13, 14));
+?>
+--EXPECT--
+int(5)