diff options
author | Derick Rethans <derick@php.net> | 2010-03-07 13:54:46 +0000 |
---|---|---|
committer | Derick Rethans <derick@php.net> | 2010-03-07 13:54:46 +0000 |
commit | ffeb100e5ef8e093d57d4baadb6f61418cf4da25 (patch) | |
tree | cfac8c8678cebcf6c6e27b4b338e8d3912d49791 | |
parent | 9910aab74ed7c46a0da4043634528cbf2a5bbc75 (diff) | |
download | php-git-ffeb100e5ef8e093d57d4baadb6f61418cf4da25.tar.gz |
- Fixed bug #50555 (DateTime::sub() allows 'relative' time modifications).
-rw-r--r-- | ext/date/php_date.c | 5 | ||||
-rw-r--r-- | ext/date/tests/bug50055.phpt | 30 |
2 files changed, 35 insertions, 0 deletions
diff --git a/ext/date/php_date.c b/ext/date/php_date.c index cf418d60ac..521aa7eddd 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2980,6 +2980,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; } diff --git a/ext/date/tests/bug50055.phpt b/ext/date/tests/bug50055.phpt new file mode 100644 index 0000000000..907bb93e44 --- /dev/null +++ b/ext/date/tests/bug50055.phpt @@ -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 |