@@ -2522,14 +2522,10 @@ PHPAPI void php_date_initialize_from_ts_long(php_date_obj *dateobj, zend_long se
2522
2522
PHPAPI bool php_date_initialize_from_ts_double (php_date_obj * dateobj , double ts ) /* {{{ */
2523
2523
{
2524
2524
double sec_dval = trunc (ts );
2525
- zend_long sec = (zend_long )sec_dval ;
2526
- int usec = (int )(fmod (ts , 1 ) * 1000000 );
2527
-
2528
- if (UNEXPECTED (isnan (sec_dval )
2529
- || sec_dval > (double )TIMELIB_LONG_MAX
2530
- || sec_dval < (double )TIMELIB_LONG_MIN
2531
- || (sec == TIMELIB_LONG_MIN && usec < 0 )
2532
- )) {
2525
+ zend_long sec ;
2526
+ int usec ;
2527
+
2528
+ if (UNEXPECTED (isnan (sec_dval ) || !PHP_DATE_DOUBLE_FITS_LONG (sec_dval ))) {
2533
2529
zend_throw_error (
2534
2530
date_ce_date_range_error ,
2535
2531
"Seconds must be a finite number between " TIMELIB_LONG_FMT " and " TIMELIB_LONG_FMT ", %g given" ,
@@ -2540,7 +2536,21 @@ PHPAPI bool php_date_initialize_from_ts_double(php_date_obj *dateobj, double ts)
2540
2536
return false;
2541
2537
}
2542
2538
2539
+ sec = (zend_long )sec_dval ;
2540
+ usec = (int )(fmod (ts , 1 ) * 1000000 );
2541
+
2543
2542
if (UNEXPECTED (usec < 0 )) {
2543
+ if (UNEXPECTED (sec == TIMELIB_LONG_MIN )) {
2544
+ zend_throw_error (
2545
+ date_ce_date_range_error ,
2546
+ "Seconds must be a finite number between " TIMELIB_LONG_FMT " and " TIMELIB_LONG_FMT ", %g given" ,
2547
+ TIMELIB_LONG_MIN ,
2548
+ TIMELIB_LONG_MAX ,
2549
+ sec_dval
2550
+ );
2551
+ return false;
2552
+ }
2553
+
2544
2554
sec = sec - 1 ;
2545
2555
usec = 1000000 + usec ;
2546
2556
}
0 commit comments