Don't fatal on invalid timestamps
authorKunal Mehta <legoktm@member.fsf.org>
Thu, 27 Oct 2016 19:06:30 +0000 (12:06 -0700)
committerAaron Schulz <aschulz@wikimedia.org>
Thu, 3 Nov 2016 19:09:13 +0000 (19:09 +0000)
Database::timestamp() intentionally lets errors bubble up, so catch
invalid user-provided timestamps in
ReverseChronologicalPage::getDateCond(), and avoid using an offset in
that case.

Bug: T149257
Change-Id: Ida85eb44b66e8a0166e7f68a101ff094e04b1c8e

includes/pager/ReverseChronologicalPager.php

index 4895b4f..6f325c9 100644 (file)
@@ -80,7 +80,7 @@ abstract class ReverseChronologicalPager extends IndexPager {
 
                // If year and month are false, don't update the mOffset
                if ( !$this->mYear && !$this->mMonth ) {
-                       return;
+                       return null;
                }
 
                // Given an optional year, month, and day, we need to generate a timestamp
@@ -150,7 +150,13 @@ abstract class ReverseChronologicalPager extends IndexPager {
                $timestamp = MWTimestamp::getInstance( "${ymd}000000" );
                $timestamp->setTimezone( $this->getConfig()->get( 'Localtimezone' ) );
 
-               $this->mOffset = $this->mDb->timestamp( $timestamp->getTimestamp() );
+               try {
+                       $this->mOffset = $this->mDb->timestamp( $timestamp->getTimestamp() );
+               } catch ( TimestampException $e ) {
+                       // Invalid user provided timestamp (T149257)
+                       return null;
+               }
+
                return $this->mOffset;
        }
 }