// Check if the file is hidden
if ( $img->isDeleted( File::DELETED_FILE ) ) {
- wfThumbError( 404, "The source file '$fileName' does not exist." );
+ wfThumbErrorText( 404, "The source file '$fileName' does not exist." );
return;
}
}
// If its not a redirect that has a target as a local file, give 404.
- wfThumbError( 404, "The source file '$fileName' does not exist." );
+ wfThumbErrorText( 404, "The source file '$fileName' does not exist." );
return;
} elseif ( $img->getPath() === false ) {
- wfThumbError( 500, "The source file '$fileName' is not locally accessible." );
+ wfThumbErrorText( 400, "The source file '$fileName' is not locally accessible." );
return;
}
}
return;
} else {
- wfThumbError( 404, "The given path of the specified thumbnail is incorrect;
+ wfThumbErrorText( 404, "The given path of the specified thumbnail is incorrect;
expected '" . $img->getThumbRel( $thumbName ) . "' but got '" .
rawurldecode( $rel404 ) . "'." );
return;
wfThumbError( 500, 'Could not stream the file' );
} else {
RequestContext::getMain()->getStats()->timing( 'media.thumbnail.stream', $streamtime );
- wfDebugLog( 'thumbnailaccess', time() . ' ' . $thumbPath . ' ' . ob_get_length() . ' Streamed ' );
}
return;
}
$user = RequestContext::getMain()->getUser();
if ( !wfThumbIsStandard( $img, $params ) && $user->pingLimiter( 'renderfile-nonstandard' ) ) {
- wfThumbError( 500, wfMessage( 'actionthrottledtext' )->parse() );
+ wfThumbError( 429, wfMessage( 'actionthrottledtext' )->parse() );
return;
} elseif ( $user->pingLimiter( 'renderfile' ) ) {
- wfThumbError( 500, wfMessage( 'actionthrottledtext' )->parse() );
+ wfThumbError( 429, wfMessage( 'actionthrottledtext' )->parse() );
return;
}
$errorCode = 500;
if ( !$thumb ) {
$errorMsg = $errorMsg ?: $msg->rawParams( 'File::transform() returned false' )->escaped();
+ if ( $errorMsg instanceof MessageSpecifier && $errorMsg->getKey() === 'thumbnail_image-failure-limit' ) {
+ $errorCode = 429;
+ }
} elseif ( $thumb->isError() ) {
$errorMsg = $thumb->getHtmlMsg();
} elseif ( !$thumb->hasFile() ) {
return null;
}
+
+/**
+ * Output a thumbnail generation error message
+ *
+ * @param int $status
+ * @param string $msg Plain text (will be html escaped)
+ * @return void
+ */
+function wfThumbErrorText( $status, $msgText ) {
+ wfThumbError( $status, htmlspecialchars( $msgText ) );
+}
+
/**
* Output a thumbnail generation error message
*
* @param int $status
- * @param string $msg HTML
+ * @param string $msgHtml HTML
* @return void
*/
-function wfThumbError( $status, $msg ) {
+function wfThumbError( $status, $msgHtml ) {
global $wgShowHostnames;
header( 'Cache-Control: no-cache' );
header( 'Content-Type: text/html; charset=utf-8' );
- if ( $status == 400 ) {
- HttpStatus::header( 400 );
- } elseif ( $status == 404 ) {
- HttpStatus::header( 404 );
+ if ( $status == 400 || $status == 404 || $status == 429 ) {
+ HttpStatus::header( $status );
} elseif ( $status == 403 ) {
HttpStatus::header( 403 );
header( 'Vary: Cookie' );
<body>
<h1>Error generating thumbnail</h1>
<p>
-$msg
+$msgHtml
</p>
$debug
</body>