Allow SVGs encoded as WINDOWS-125[0-8].
authorBrian Wolff <bawolff+wn@gmail.com>
Mon, 1 Aug 2016 08:01:46 +0000 (08:01 +0000)
committerBrian Wolff <bawolff+wn@gmail.com>
Mon, 1 Aug 2016 11:34:05 +0000 (11:34 +0000)
The check is meant to prevent weird encodings like UTF-7 or HZ.
Encodings like the WINDOWS-125X family which are extensions of ascii
are safe. Additionally people still use windows-1252 on rare occasion.

Bug: T72937
Change-Id: I6cd63274cc04a7fca3afd244b4122ea64042dced

includes/upload/UploadBase.php
tests/phpunit/includes/upload/UploadBaseTest.php

index 71d032f..f4bb7ec 100644 (file)
@@ -53,7 +53,16 @@ abstract class UploadBase {
                'ISO-8859-1',
                'ISO-8859-2',
                'UTF-16',
-               'UTF-32'
+               'UTF-32',
+               'WINDOWS-1250',
+               'WINDOWS-1251',
+               'WINDOWS-1252',
+               'WINDOWS-1253',
+               'WINDOWS-1254',
+               'WINDOWS-1255',
+               'WINDOWS-1256',
+               'WINDOWS-1257',
+               'WINDOWS-1258',
        ];
 
        const SUCCESS = 0;
index de6c412..3debe6e 100644 (file)
@@ -396,6 +396,23 @@ class UploadBaseTest extends MediaWikiTestCase {
                ];
                // @codingStandardsIgnoreEnd
        }
+
+       /**
+        * @dataProvider provideCheckXMLEncodingMissmatch
+        */
+       public function testCheckXMLEncodingMissmatch( $fileContents, $evil ) {
+               $filename = $this->getNewTempFile();
+               file_put_contents( $filename, $fileContents );
+               $this->assertSame( UploadBase::checkXMLEncodingMissmatch( $filename ), $evil );
+       }
+
+       public function provideCheckXMLEncodingMissmatch() {
+               return [
+                       [ '<?xml version="1.0" encoding="utf-7"?><svg></svg>', true ],
+                       [ '<?xml version="1.0" encoding="utf-8"?><svg></svg>', false ],
+                       [ '<?xml version="1.0" encoding="WINDOWS-1252"?><svg></svg>', false ],
+               ];
+       }
 }
 
 class UploadTestHandler extends UploadBase {