From a530be17cfef51d4e9005082fab29b25616af223 Mon Sep 17 00:00:00 2001 From: Aaron Schulz Date: Wed, 30 Apr 2014 16:51:57 -0700 Subject: [PATCH] Made wfThumbIsStandard() aware of the width/height handler scaling choice * Generally, either the height or width is used for each description page link when using $wgImageLimits. This depends on the $wgImageLimits values and the file dimensions. Description page links should better pass the wfThumbIsStandard() method now, and thus have weaker rate-limiting. Change-Id: Id1c3b0fc57f8ed3c14929a1a1661842a069b805d --- thumb.php | 58 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/thumb.php b/thumb.php index b0310c82e2..3d49a4353b 100644 --- a/thumb.php +++ b/thumb.php @@ -430,9 +430,9 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath * links to on file description pages and possibly parser output. * * $params is considered non-standard if they involve a non-standard - * width or any parameter aside from width and page number. The number - * of possible files with standard parameters is far less than that of all - * possible combinations; rate-limiting for them can thus be more generious. + * width or any non-default parameters aside from width and page number. + * The number of possible files with standard parameters is far less than + * that of all combinations; rate-limiting for them can thus be more generious. * * @param File $file * @param array $params @@ -441,30 +441,44 @@ function wfGenerateThumbnail( File $file, array $params, $thumbName, $thumbPath function wfThumbIsStandard( File $file, array $params ) { global $wgThumbLimits, $wgImageLimits; - if ( isset( $params['width'] ) ) { - $widths = $wgThumbLimits; + $handler = $file->getHandler(); + if ( !$handler || !isset( $params['width'] ) ) { + return false; + } + + $basicParams = array(); + if ( isset( $params['page'] ) ) { + $basicParams['page'] = $params['page']; + } + + // Check if the width matches one of $wgThumbLimits + if ( in_array( $params['width'], $wgThumbLimits ) ) { + $normalParams = $basicParams + array( 'width' => $params['width'] ); + // Append any default values to the map (e.g. "lossy", "lossless", ...) + $handler->normaliseParams( $file, $normalParams ); + } else { + // If not, then check if the width matchs one of $wgImageLimits + $match = false; foreach ( $wgImageLimits as $pair ) { - $widths[] = $pair[0]; + $normalParams = $basicParams + array( 'width' => $pair[0], 'height' => $pair[1] ); + // Decide whether the thumbnail should be scaled on width or height. + // Also append any default values to the map (e.g. "lossy", "lossless", ...) + $handler->normaliseParams( $file, $normalParams ); + // Check if this standard thumbnail size maps to the given width + if ( $normalParams['width'] == $params['width'] ) { + $match = true; + break; + } } - if ( !in_array( $params['width'], $widths ) ) { - return false; + if ( !$match ) { + return false; // not standard for description pages } } - $handler = $file->getHandler(); - if ( $handler ) { - // Standard thumbnails use a standard width and any page number - $normalParams = array( 'width' => $params['width'] ); - if ( isset( $params['page'] ) ) { - $normalParams['page'] = $params['page']; - } - // Append any default values to the map (e.g. "lossy", "lossless", "seek"...) - $handler->normaliseParams( $file, $normalParams ); - // Check that the given values for non-page, non-width, params are just defaults - foreach ( $params as $key => $value ) { - if ( !isset( $normalParams[$key] ) || $normalParams[$key] !== $value ) { - return false; - } + // Check that the given values for non-page, non-width, params are just defaults + foreach ( $params as $key => $value ) { + if ( !isset( $normalParams[$key] ) || $normalParams[$key] != $value ) { + return false; } } -- 2.20.1