- Fixed bug #50555 (DateTime::sub() allows 'relative' time modifications).

This commit is contained in:
Derick Rethans 2010-03-07 13:54:46 +00:00
parent a2ad4ea8b5
commit f1286280d1
3 changed files with 37 additions and 0 deletions

2
NEWS
View File

@ -27,6 +27,8 @@ PHP NEWS
- Fixed bug #50383 (Exceptions thrown in __call / __callStatic do not include
file and line in trace). (Felipe)
- Fixed bug #50358 (Compile failure compiling ext/phar/util.lo). (Felipe)
- Fixed bug #50555 (DateTime::sub() allows 'relative' time modifications). (Derick)
?? ??? 20??, PHP 5.3.2
- Upgraded bundled sqlite to version 3.6.22. (Ilia)

View File

@ -2851,6 +2851,11 @@ PHP_FUNCTION(date_sub)
intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC);
DATE_CHECK_INITIALIZED(intobj->initialized, DateInterval);
if (intobj->diff->have_special_relative) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Only non-special relative time specifications are supported for subtraction");
return;
}
if (intobj->diff->invert) {
bias = -1;
}

View File

@ -0,0 +1,30 @@
--TEST--
Bug #50555 (DateTime::sub() allows 'relative' time modifications).
--FILE--
<?php
$now = '2010-03-07 13:21:38 UTC';
//positive DateInterval
$da1 = date_create( $now );
$ds1 = date_create( $now );
$i = DateInterval::createFromDateString('third Tuesday of next month');
echo $da1->format( DateTime::ISO8601 ), "\n";
echo date_add($da1, $i)->format( DateTime::ISO8601 ), "\n";
date_sub($ds1, $i);
//negative DateInterval
$da2 = date_create( $now );
$ds2 = date_create( $now );
$i2 = DateInterval::createFromDateString('third Tuesday of last month');
echo $da2->format( DateTime::ISO8601 ), "\n";
echo date_add($da2, $i2)->format( DateTime::ISO8601 ), "\n";//works
date_sub($ds2, $i);
?>
--EXPECTF--
2010-03-07T13:21:38+0000
2010-04-20T13:21:38+0000
Warning: date_sub(): Only non-special relative time specifications are supported for subtraction in %sbug50055.php on line 9
2010-03-07T13:21:38+0000
2010-02-16T13:21:38+0000
Warning: date_sub(): Only non-special relative time specifications are supported for subtraction in %sbug50055.php on line 17