aboutsummaryrefslogtreecommitdiffstats
path: root/includes/media/SvgHandler.php
diff options
context:
space:
mode:
authorDerk-Jan Hartman <hartman.wiki@gmail.com>2022-06-11 18:31:09 +0200
committerTheDJ <hartman.wiki@gmail.com>2022-06-12 19:50:00 +0000
commita93272debac8cb5a7fb871590e6e5609d972fef2 (patch)
treec8506316c9c550aa012d42a8afd9f9df650df8fd /includes/media/SvgHandler.php
parente8968a23c521bf8cfb77ae86f80974d201308fc5 (diff)
downloadmediawikicore-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.php15
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 ];