Skip to content

Commit e3015de

Browse files
committed
Fix GH-16234 jewishtojd overflow on year argument.
close GH-16243
1 parent 922b9d6 commit e3015de

File tree

3 files changed

+29
-2
lines changed

3 files changed

+29
-2
lines changed

NEWS

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ PHP NEWS
77
. Fixed GH-16241: easter_days/easter_date overflow on year argument.
88
(David Carlier)
99
. Fixed GH-16263: jddayofweek overflow. (cmb)
10+
. Fixed GH-16234: jewishtojd overflow. (nielsdos)
1011

1112
- CLI:
1213
. Fixed bug GH-16137: duplicate http headers when set several times by

ext/calendar/jewish.c

+17-2
Original file line numberDiff line numberDiff line change
@@ -433,16 +433,31 @@ static void MoladOfMetonicCycle(
433433
zend_long *pMoladHalakim)
434434
{
435435
register zend_ulong r1, r2, d1, d2;
436+
zend_long chk;
436437

437438
/* Start with the time of the first molad after creation. */
438439
r1 = NEW_MOON_OF_CREATION;
440+
chk = (zend_long)metonicCycle;
441+
442+
if (chk > (ZEND_LONG_MAX - NEW_MOON_OF_CREATION) / (HALAKIM_PER_METONIC_CYCLE & 0xFFFF)) {
443+
*pMoladDay = 0;
444+
*pMoladHalakim = 0;
445+
return;
446+
}
439447

440448
/* Calculate metonicCycle * HALAKIM_PER_METONIC_CYCLE. The upper 32
441449
* bits of the result will be in r2 and the lower 16 bits will be
442450
* in r1. */
443-
r1 += metonicCycle * (HALAKIM_PER_METONIC_CYCLE & 0xFFFF);
451+
r1 += chk * (HALAKIM_PER_METONIC_CYCLE & 0xFFFF);
452+
453+
if (chk > (ZEND_LONG_MAX - (r1 >> 16)) / ((HALAKIM_PER_METONIC_CYCLE >> 16) & 0xFFFF)) {
454+
*pMoladDay = 0;
455+
*pMoladHalakim = 0;
456+
return;
457+
}
458+
444459
r2 = r1 >> 16;
445-
r2 += metonicCycle * ((HALAKIM_PER_METONIC_CYCLE >> 16) & 0xFFFF);
460+
r2 += chk * ((HALAKIM_PER_METONIC_CYCLE >> 16) & 0xFFFF);
446461

447462
/* Calculate r2r1 / HALAKIM_PER_DAY. The remainder will be in r1, the
448463
* upper 16 bits of the quotient will be in d2 and the lower 16 bits

ext/calendar/tests/gh16234.phpt

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
--TEST--
2+
GH-16234 jewishtojd overflow on year argument
3+
--EXTENSIONS--
4+
calendar
5+
--FILE--
6+
<?php
7+
jewishtojd(1218182888, 1, 1218182888);
8+
echo "DONE";
9+
?>
10+
--EXPECT--
11+
DONE

0 commit comments

Comments
 (0)