From b706fa4ac18496f24acb81a891d2130b90848b66 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Tue, 17 May 2016 22:22:05 +0100 Subject: [PATCH] exception: Create generic BadRequestError based on ErrorPageError 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 | 1 + includes/exception/BadRequestError.php | 34 ++++++++++++++++++++++++++ includes/exception/BadTitleError.php | 20 +++------------ 3 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 includes/exception/BadRequestError.php diff --git a/autoload.php b/autoload.php index cf0e4171d0..e16708f436 100644 --- a/autoload.php +++ b/autoload.php @@ -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 index 0000000000..5fcf0e6217 --- /dev/null +++ b/includes/exception/BadRequestError.php @@ -0,0 +1,34 @@ +setStatusCode( 400 ); + parent::report(); + } +} diff --git a/includes/exception/BadTitleError.php b/includes/exception/BadTitleError.php index 3f4c2131f7..40c18a4202 100644 --- a/includes/exception/BadTitleError.php +++ b/includes/exception/BadTitleError.php @@ -20,13 +20,14 @@ /** * 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(); - } } -- 2.20.1