exception: Create generic BadRequestError based on ErrorPageError
authorTimo Tijhof <krinklemail@gmail.com>
Tue, 17 May 2016 21:22:05 +0000 (22:22 +0100)
committerBartosz Dziewoński <matma.rex@gmail.com>
Thu, 19 May 2016 18:59:15 +0000 (18:59 +0000)
Ideally this would be an option in ErrorPageError (perhaps even the default),
but its constructor isn't very suitable for that.

After this lands, uses of ErrorPageError should be audited to see if it makes
sense to emit a 400 status code.

Change-Id: I4beb6a4f256446b98b66d5e4bcdbab8f247441a8

autoload.php
includes/exception/BadRequestError.php [new file with mode: 0644]
includes/exception/BadTitleError.php

index cf0e417..e16708f 100644 (file)
@@ -164,6 +164,7 @@ $wgAutoloadLocalClasses = [
        'BacklinkJobUtils' => __DIR__ . '/includes/jobqueue/utils/BacklinkJobUtils.php',
        'BackupDumper' => __DIR__ . '/maintenance/backup.inc',
        'BackupReader' => __DIR__ . '/maintenance/importDump.php',
+       'BadRequestError' => __DIR__ . '/includes/exception/BadRequestError.php',
        'BadTitleError' => __DIR__ . '/includes/exception/BadTitleError.php',
        'BagOStuff' => __DIR__ . '/includes/libs/objectcache/BagOStuff.php',
        'BaseDump' => __DIR__ . '/maintenance/backupPrefetch.inc',
diff --git a/includes/exception/BadRequestError.php b/includes/exception/BadRequestError.php
new file mode 100644 (file)
index 0000000..5fcf0e6
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * An error page that emits an HTTP 400 Bad Request status code.
+ *
+ * @since 1.28
+ * @ingroup Exception
+ */
+class BadRequestError extends ErrorPageError {
+
+       public function report() {
+               global $wgOut;
+               $wgOut->setStatusCode( 400 );
+               parent::report();
+       }
+}
index 3f4c213..40c18a4 100644 (file)
 
 /**
  * Show an error page on a badtitle.
- * Similar to ErrorPage, but emit a 400 HTTP error code to let mobile
- * browser it is not really a valid content.
+ *
+ * Uses BadRequestError to emit a 400 HTTP error code to ensure caching proxies and
+ * mobile browsers know not to cache it as valid content. (T35646)
  *
  * @since 1.19
  * @ingroup Exception
  */
-class BadTitleError extends ErrorPageError {
+class BadTitleError extends BadRequestError {
        /**
         * @param string|Message|MalformedTitleException $msg A message key (default: 'badtitletext'), or
         *     a MalformedTitleException to figure out things from
@@ -45,17 +46,4 @@ class BadTitleError extends ErrorPageError {
                        parent::__construct( 'badtitle', $msg, $params );
                }
        }
-
-       /**
-        * Just like ErrorPageError::report() but additionally set
-        * a 400 HTTP status code (bug 33646).
-        */
-       public function report() {
-               global $wgOut;
-
-               // bug 33646: a badtitle error page need to return an error code
-               // to let mobile browser now that it is not a normal page.
-               $wgOut->setStatusCode( 400 );
-               parent::report();
-       }
 }