diff options
author | Derk-Jan Hartman <hartman.wiki@gmail.com> | 2022-06-11 18:31:09 +0200 |
---|---|---|
committer | TheDJ <hartman.wiki@gmail.com> | 2022-06-12 19:50:00 +0000 |
commit | a93272debac8cb5a7fb871590e6e5609d972fef2 (patch) | |
tree | c8506316c9c550aa012d42a8afd9f9df650df8fd /includes/media/SvgHandler.php | |
parent | e8968a23c521bf8cfb77ae86f80974d201308fc5 (diff) | |
download | mediawikicore-a93272debac8cb5a7fb871590e6e5609d972fef2.tar.gz mediawikicore-a93272debac8cb5a7fb871590e6e5609d972fef2.zip |
Allow any SVG language tag that is well formed IETF
This adds support for languages that the SVG uses but that MediaWiki
does not support. It might not be able to find the correct
languagename for that language code, specifically for als.
Add some paramString parsing testcases
Bug: T279874
Change-Id: Id8a62e2a9c5e1565f173b1bba466306741b62762
Diffstat (limited to 'includes/media/SvgHandler.php')
-rw-r--r-- | includes/media/SvgHandler.php | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/includes/media/SvgHandler.php b/includes/media/SvgHandler.php index 66e630d035a5..5a3bb0983363 100644 --- a/includes/media/SvgHandler.php +++ b/includes/media/SvgHandler.php @@ -145,6 +145,7 @@ class SvgHandler extends ImageHandler { /** * Determines render language from image parameters + * This is a lowercase IETF language * * @param array $params * @return string @@ -534,11 +535,11 @@ class SvgHandler extends ImageHandler { if ( in_array( $name, [ 'width', 'height' ] ) ) { // Reject negative heights, widths return ( $value > 0 ); - } elseif ( $name == 'lang' ) { + } + if ( $name == 'lang' ) { // Validate $code if ( $value === '' - || !MediaWikiServices::getInstance()->getLanguageNameUtils() - ->isValidCode( $value ) + || !Language::isWellFormedLanguageTag( $value ) ) { return false; } @@ -569,8 +570,12 @@ class SvgHandler extends ImageHandler { public function parseParamString( $str ) { $m = false; - if ( preg_match( '/^lang([a-z]+(?:-[a-z]+)*)-(\d+)px$/i', $str, $m ) ) { - return [ 'width' => array_pop( $m ), 'lang' => $m[1] ]; + // Language codes are supposed to be lowercase + if ( preg_match( '/^lang([a-z]+(?:-[a-z]+)*)-(\d+)px$/', $str, $m ) ) { + if ( Language::isWellFormedLanguageTag( $m[1] ) ) { + return [ 'width' => array_pop( $m ), 'lang' => $m[1] ]; + } + return [ 'width' => array_pop( $m ), 'lang' => self::SVG_DEFAULT_RENDER_LANG ]; } if ( preg_match( '/^(\d+)px$/', $str, $m ) ) { return [ 'width' => $m[1], 'lang' => self::SVG_DEFAULT_RENDER_LANG ]; |