Daniel Kinzler has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/67816


Change subject: (bug 49264, bug 48965) validate time format.
......................................................................

(bug 49264, bug 48965) validate time format.

This provides validation of the provided date/time string
when constructing a TimeValue object.

It does not however validate the calendar model, since the
DataValue does not (and should not) know which models would be
valid. This needs to be done by a Validator based on the
proiperty's data type (not the data value type).

Note that this contributes to the solution of the mentioned bugs,
but is not a complete fix.

Change-Id: I6990983ef0c0cad7c9d4f271bdf803902b94230b
---
M DataValues/includes/values/TimeValue.php
M DataValues/tests/phpunit/includes/values/TimeValueTest.php
2 files changed, 109 insertions(+), 4 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/DataValues 
refs/changes/16/67816/1

diff --git a/DataValues/includes/values/TimeValue.php 
b/DataValues/includes/values/TimeValue.php
index 8b71731..e51acd4 100644
--- a/DataValues/includes/values/TimeValue.php
+++ b/DataValues/includes/values/TimeValue.php
@@ -91,7 +91,7 @@
         *
         * @since 0.1
         *
-        * @var integer
+        * @var int
         */
        protected $timezone;
 
@@ -111,6 +111,7 @@
         * @param string $time
         * @param integer $timezone
         * @param integer $before
+        * @param integer $after
         * @param integer $precision
         * @param string $calendarModel
         *
@@ -119,6 +120,10 @@
        public function __construct( $time, $timezone, $before, $after, 
$precision, $calendarModel ) {
                if ( !is_string( $time ) ) {
                        throw new IllegalValueException( '$time needs to be a 
string' );
+               }
+
+               if ( !preg_match( 
'!^[-+]\d{1,16}-(0\d|1[012])-([012]\d|3[01])T([01]\d|2[0123]):[0-5]\d:([0-5]\d|6[012])Z$!',
 $time ) ) {
+                       throw new IllegalValueException( '$time needs to be a 
valid ISO 8601 date' );
                }
 
                if ( !is_integer( $timezone ) ) {
@@ -145,7 +150,7 @@
                        throw new IllegalValueException( '$precision out of 
allowed bounds' );
                }
 
-               if ( !is_string( $calendarModel ) ) {
+               if ( !is_string( $calendarModel ) ) { //XXX: enforce IRI? Or at 
least a size limit?
                        throw new IllegalValueException( '$calendarModel needs 
to be a string' );
                }
 
diff --git a/DataValues/tests/phpunit/includes/values/TimeValueTest.php 
b/DataValues/tests/phpunit/includes/values/TimeValueTest.php
index e698eea..dd06062 100644
--- a/DataValues/tests/phpunit/includes/values/TimeValueTest.php
+++ b/DataValues/tests/phpunit/includes/values/TimeValueTest.php
@@ -117,12 +117,12 @@
                );
 
                $argLists[] = array(
-                       true,
+                       'DataValues\IllegalValueException',
                        '+00000002013-01-01T00:00:00Z',
                        0,
                        0,
                        0,
-                       0, // 0 == TimeValue::PRECISION_GIGAYEAR
+                       333,
                        'http://nyan.cat/original.php',
                );
 
@@ -166,6 +166,106 @@
                        'http://nyan.cat/original.php',
                );
 
+               $argLists[] = array(
+                       'DataValues\IllegalValueException',
+                       'bla',
+                       0,
+                       0,
+                       0,
+                       TimeValue::PRECISION_SECOND,
+                       'http://nyan.cat/original.php',
+               );
+
+               $argLists[] = array(
+                       'DataValues\IllegalValueException',
+                       '+00000002013/01/01 00:00:00',
+                       0,
+                       0,
+                       0,
+                       TimeValue::PRECISION_SECOND,
+                       'http://nyan.cat/original.php',
+               );
+
+               $argLists[] = array(
+                       'DataValues\IllegalValueException',
+                       '+00000002013-22-01T00:00:00Z',
+                       0,
+                       0,
+                       0,
+                       TimeValue::PRECISION_SECOND,
+                       'http://nyan.cat/original.php',
+               );
+
+               $argLists[] = array(
+                       'DataValues\IllegalValueException',
+                       '+00000002013-01-35T00:00:00Z',
+                       0,
+                       0,
+                       0,
+                       TimeValue::PRECISION_SECOND,
+                       'http://nyan.cat/original.php',
+               );
+
+               $argLists[] = array(
+                       'DataValues\IllegalValueException',
+                       '+00000002013-01-01T27:00:00Z',
+                       0,
+                       0,
+                       0,
+                       TimeValue::PRECISION_SECOND,
+                       'http://nyan.cat/original.php',
+               );
+
+               $argLists[] = array(
+                       'DataValues\IllegalValueException',
+                       '+00000002013-01-01T00:66:00Z',
+                       0,
+                       0,
+                       0,
+                       TimeValue::PRECISION_SECOND,
+                       'http://nyan.cat/original.php',
+               );
+
+               $argLists[] = array(
+                       'DataValues\IllegalValueException',
+                       '+00000002013-01-01T00:00:66Z',
+                       0,
+                       0,
+                       0,
+                       TimeValue::PRECISION_SECOND,
+                       'http://nyan.cat/original.php',
+               );
+
+               $argLists[] = array(
+                       'DataValues\IllegalValueException',
+                       '+00000002013-01-01T00:00:00+60',
+                       0,
+                       0,
+                       0,
+                       TimeValue::PRECISION_SECOND,
+                       'http://nyan.cat/original.php',
+               );
+
+               $argLists[] = array(
+                       true,
+                       '+2013-01-01T00:00:00Z',
+                       0,
+                       0,
+                       0,
+                       TimeValue::PRECISION_SECOND,
+                       'http://nyan.cat/original.php',
+               );
+
+               $argLists[] = array(
+                       true,
+                       '-5-01-01T00:00:00Z',
+                       0,
+                       0,
+                       0,
+                       TimeValue::PRECISION_SECOND,
+                       'http://nyan.cat/original.php',
+               );
+
                return $argLists;
        }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/67816
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6990983ef0c0cad7c9d4f271bdf803902b94230b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/DataValues
Gerrit-Branch: master
Gerrit-Owner: Daniel Kinzler <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to