summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerick Rethans <derick@php.net>2010-03-07 13:54:46 +0000
committerDerick Rethans <derick@php.net>2010-03-07 13:54:46 +0000
commitffeb100e5ef8e093d57d4baadb6f61418cf4da25 (patch)
treecfac8c8678cebcf6c6e27b4b338e8d3912d49791
parent9910aab74ed7c46a0da4043634528cbf2a5bbc75 (diff)
downloadphp-git-ffeb100e5ef8e093d57d4baadb6f61418cf4da25.tar.gz
- Fixed bug #50555 (DateTime::sub() allows 'relative' time modifications).
-rw-r--r--ext/date/php_date.c5
-rw-r--r--ext/date/tests/bug50055.phpt30
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