From 35325caab19e6ce8b2ab97a1560e90dc755d799e Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sun, 6 Oct 2024 05:46:33 +0100 Subject: [PATCH 1/3] Fix GH-16258 overflow on jddayofweek argument. --- ext/calendar/dow.c | 4 ++++ ext/calendar/tests/bug53574_2.phpt | 2 +- ext/calendar/tests/gh16258.phpt | 12 ++++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 ext/calendar/tests/gh16258.phpt diff --git a/ext/calendar/dow.c b/ext/calendar/dow.c index 38da7e157c279..15ad281b23640 100644 --- a/ext/calendar/dow.c +++ b/ext/calendar/dow.c @@ -35,6 +35,10 @@ int DayOfWeek( { int dow; + if ((sdn + 1) > INT_MAX) { + return (0); + } + dow = (sdn + 1) % 7; if (dow >= 0) { return (dow); diff --git a/ext/calendar/tests/bug53574_2.phpt b/ext/calendar/tests/bug53574_2.phpt index cbd4b7ad2cdd1..4bbd0691d232d 100644 --- a/ext/calendar/tests/bug53574_2.phpt +++ b/ext/calendar/tests/bug53574_2.phpt @@ -25,7 +25,7 @@ array(9) { ["year"]=> int(0) ["dow"]=> - int(3) + int(0) ["abbrevdayname"]=> string(3) "Wed" ["dayname"]=> diff --git a/ext/calendar/tests/gh16258.phpt b/ext/calendar/tests/gh16258.phpt new file mode 100644 index 0000000000000..546c543817ee2 --- /dev/null +++ b/ext/calendar/tests/gh16258.phpt @@ -0,0 +1,12 @@ +--TEST-- +GH-16258 (jddayofweek overflow on argument) +--EXTENSIONS-- +calendar +--FILE-- + +--EXPECT-- +DONE From 81633ab1ab1b18df6a1e59b05d130edeb559fcc1 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sun, 6 Oct 2024 12:34:09 +0100 Subject: [PATCH 2/3] rework checks and re-establish old test value. --- ext/calendar/dow.c | 10 +++------- ext/calendar/tests/bug53574_2.phpt | 2 +- ext/calendar/tests/gh16258.phpt | 4 ++-- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/ext/calendar/dow.c b/ext/calendar/dow.c index 15ad281b23640..139b88bfe8a62 100644 --- a/ext/calendar/dow.c +++ b/ext/calendar/dow.c @@ -35,15 +35,11 @@ int DayOfWeek( { int dow; - if ((sdn + 1) > INT_MAX) { - return (0); - } - - dow = (sdn + 1) % 7; + dow = (int)(sdn % 7 + 1); if (dow >= 0) { - return (dow); + return (dow % 7); } else { - return (dow + 7); + return (dow + 7) % 7; } } diff --git a/ext/calendar/tests/bug53574_2.phpt b/ext/calendar/tests/bug53574_2.phpt index 4bbd0691d232d..cbd4b7ad2cdd1 100644 --- a/ext/calendar/tests/bug53574_2.phpt +++ b/ext/calendar/tests/bug53574_2.phpt @@ -25,7 +25,7 @@ array(9) { ["year"]=> int(0) ["dow"]=> - int(0) + int(3) ["abbrevdayname"]=> string(3) "Wed" ["dayname"]=> diff --git a/ext/calendar/tests/gh16258.phpt b/ext/calendar/tests/gh16258.phpt index 546c543817ee2..9f2b70fac542b 100644 --- a/ext/calendar/tests/gh16258.phpt +++ b/ext/calendar/tests/gh16258.phpt @@ -4,8 +4,8 @@ GH-16258 (jddayofweek overflow on argument) calendar --FILE-- --EXPECT-- From dcdf45dc4c03237c60c505d2644bbe32e0898755 Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sun, 6 Oct 2024 14:57:53 +0100 Subject: [PATCH 3/3] changes from feedback --- ext/calendar/dow.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/ext/calendar/dow.c b/ext/calendar/dow.c index 139b88bfe8a62..079dd6c15ada4 100644 --- a/ext/calendar/dow.c +++ b/ext/calendar/dow.c @@ -33,14 +33,7 @@ int DayOfWeek( zend_long sdn) { - int dow; - - dow = (int)(sdn % 7 + 1); - if (dow >= 0) { - return (dow % 7); - } else { - return (dow + 7) % 7; - } + return (int)(sdn % 7 + 8) % 7; } const char * const DayNameShort[7] =