Merge "Add language Doteli (dty)"
[lhc/web/wiklou.git] / includes / upload / UploadBase.php
index 6da8250..426c752 100644 (file)
@@ -288,7 +288,6 @@ abstract class UploadBase {
                 * If there was no filename or a zero size given, give up quick.
                 */
                if ( $this->isEmptyFile() ) {
-
                        return array( 'status' => self::EMPTY_FILE );
                }
 
@@ -297,7 +296,6 @@ abstract class UploadBase {
                 */
                $maxSize = self::getMaxUploadSize( $this->getSourceType() );
                if ( $this->mFileSize > $maxSize ) {
-
                        return array(
                                'status' => self::FILE_TOO_LARGE,
                                'max' => $maxSize,
@@ -311,7 +309,6 @@ abstract class UploadBase {
                 */
                $verification = $this->verifyFile();
                if ( $verification !== true ) {
-
                        return array(
                                'status' => self::VERIFICATION_ERROR,
                                'details' => $verification
@@ -323,7 +320,6 @@ abstract class UploadBase {
                 */
                $result = $this->validateName();
                if ( $result !== true ) {
-
                        return $result;
                }
 
@@ -331,7 +327,6 @@ abstract class UploadBase {
                if ( !Hooks::run( 'UploadVerification',
                        array( $this->mDestName, $this->mTempPath, &$error ) )
                ) {
-
                        return array( 'status' => self::HOOK_ABORTED, 'error' => $error );
                }
 
@@ -380,7 +375,6 @@ abstract class UploadBase {
                        wfDebug( "mime: <$mime> extension: <{$this->mFinalExtension}>\n" );
                        global $wgMimeTypeBlacklist;
                        if ( $this->checkFileExtension( $mime, $wgMimeTypeBlacklist ) ) {
-
                                return array( 'filetype-badmime', $mime );
                        }
 
@@ -394,7 +388,6 @@ abstract class UploadBase {
                        $ieTypes = $magic->getIEMimeTypes( $this->mTempPath, $chunk, $extMime );
                        foreach ( $ieTypes as $ieType ) {
                                if ( $this->checkFileExtension( $ieType, $wgMimeTypeBlacklist ) ) {
-
                                        return array( 'filetype-bad-ie-mime', $ieType );
                                }
                        }
@@ -413,7 +406,6 @@ abstract class UploadBase {
 
                $status = $this->verifyPartialFile();
                if ( $status !== true ) {
-
                        return $status;
                }
 
@@ -423,7 +415,6 @@ abstract class UploadBase {
                if ( $wgVerifyMimeType ) {
                        # XXX: Missing extension will be caught by validateName() via getTitle()
                        if ( $this->mFinalExtension != '' && !$this->verifyExtension( $mime, $this->mFinalExtension ) ) {
-
                                return array( 'filetype-mime-mismatch', $this->mFinalExtension, $mime );
                        }
                }
@@ -433,7 +424,6 @@ abstract class UploadBase {
                        if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
                                $svgStatus = $this->detectScriptInSvg( $this->mTempPath, false );
                                if ( $svgStatus !== false ) {
-
                                        return $svgStatus;
                                }
                        }
@@ -451,7 +441,6 @@ abstract class UploadBase {
 
                Hooks::run( 'UploadVerifyFile', array( $this, $mime, &$status ) );
                if ( $status !== true ) {
-
                        return $status;
                }
 
@@ -480,20 +469,17 @@ abstract class UploadBase {
                $mime = $this->mFileProps['file-mime'];
                $status = $this->verifyMimeType( $mime );
                if ( $status !== true ) {
-
                        return $status;
                }
 
                # check for htmlish code and javascript
                if ( !$wgDisableUploadScriptChecks ) {
                        if ( self::detectScript( $this->mTempPath, $mime, $this->mFinalExtension ) ) {
-
                                return array( 'uploadscripted' );
                        }
                        if ( $this->mFinalExtension == 'svg' || $mime == 'image/svg+xml' ) {
                                $svgStatus = $this->detectScriptInSvg( $this->mTempPath, true );
                                if ( $svgStatus !== false ) {
-
                                        return $svgStatus;
                                }
                        }
@@ -509,12 +495,10 @@ abstract class UploadBase {
                                $errors = $zipStatus->getErrorsArray();
                                $error = reset( $errors );
                                if ( $error[0] !== 'zip-wrong-format' ) {
-
                                        return $error;
                                }
                        }
                        if ( $this->mJavaDetected ) {
-
                                return array( 'uploadjava' );
                        }
                }
@@ -522,7 +506,6 @@ abstract class UploadBase {
                # Scan the uploaded file for viruses
                $virus = $this->detectVirus( $this->mTempPath );
                if ( $virus ) {
-
                        return array( 'uploadvirus', $virus );
                }
 
@@ -746,11 +729,11 @@ abstract class UploadBase {
                $file = $this->getLocalFile();
 
                foreach ( $sizes as $size ) {
-                       if ( $file->isVectorized()
-                               || $file->getWidth() > $size ) {
-                                       $jobs[] = new ThumbnailRenderJob( $file->getTitle(), array(
-                                               'transformParams' => array( 'width' => $size ),
-                                       ) );
+                       if ( $file->isVectorized() || $file->getWidth() > $size ) {
+                               $jobs[] = new ThumbnailRenderJob(
+                                       $file->getTitle(),
+                                       array( 'transformParams' => array( 'width' => $size ) )
+                               );
                        }
                }
 
@@ -1076,7 +1059,6 @@ abstract class UploadBase {
                $chunk = strtolower( $chunk );
 
                if ( !$chunk ) {
-
                        return false;
                }
 
@@ -1100,7 +1082,6 @@ abstract class UploadBase {
 
                # check for HTML doctype
                if ( preg_match( "/<!DOCTYPE *X?HTML/i", $chunk ) ) {
-
                        return true;
                }
 
@@ -1108,7 +1089,6 @@ abstract class UploadBase {
                // PHP/expat will interpret the given encoding in the xml declaration (bug 47304)
                if ( $extension == 'svg' || strpos( $mime, 'image/svg' ) === 0 ) {
                        if ( self::checkXMLEncodingMissmatch( $file ) ) {
-
                                return true;
                        }
                }
@@ -1221,9 +1201,9 @@ abstract class UploadBase {
                // detect the encoding in case is specifies an encoding not whitelisted in self::$safeXmlEncodings
                $attemptEncodings = array( 'UTF-16', 'UTF-16BE', 'UTF-32', 'UTF-32BE' );
                foreach ( $attemptEncodings as $encoding ) {
-                       wfSuppressWarnings();
+                       MediaWiki\suppressWarnings();
                        $str = iconv( $encoding, 'UTF-8', $contents );
-                       wfRestoreWarnings();
+                       MediaWiki\restoreWarnings();
                        if ( $str != '' && preg_match( "!<\?xml\b(.*?)\?>!si", $str, $matches ) ) {
                                if ( preg_match( $encodingRegex, $matches[1], $encMatch )
                                        && !in_array( strtoupper( $encMatch[1] ), self::$safeXmlEncodings )
@@ -1266,7 +1246,7 @@ abstract class UploadBase {
                                return array( 'uploadscriptednamespace', $this->mSVGNSError );
                        }
 
-                       return array( 'uploadscripted' );
+                       return $check->filterMatchType;
                }
 
                return false;
@@ -1281,7 +1261,7 @@ abstract class UploadBase {
        public static function checkSvgPICallback( $target, $data ) {
                // Don't allow external stylesheets (bug 57550)
                if ( preg_match( '/xml-stylesheet/i', $target ) ) {
-                       return true;
+                       return array( 'upload-scripted-pi-callback' );
                }
 
                return false;
@@ -1353,7 +1333,7 @@ abstract class UploadBase {
                if ( $strippedElement == 'script' ) {
                        wfDebug( __METHOD__ . ": Found script element '$element' in uploaded file.\n" );
 
-                       return true;
+                       return array( 'uploaded-script-svg', $strippedElement );
                }
 
                # e.g., <svg xmlns="http://www.w3.org/2000/svg">
@@ -1361,21 +1341,21 @@ abstract class UploadBase {
                if ( $strippedElement == 'handler' ) {
                        wfDebug( __METHOD__ . ": Found scriptable element '$element' in uploaded file.\n" );
 
-                       return true;
+                       return array( 'uploaded-script-svg', $strippedElement );
                }
 
                # SVG reported in Feb '12 that used xml:stylesheet to generate javascript block
                if ( $strippedElement == 'stylesheet' ) {
                        wfDebug( __METHOD__ . ": Found scriptable element '$element' in uploaded file.\n" );
 
-                       return true;
+                       return array( 'uploaded-script-svg', $strippedElement );
                }
 
                # Block iframes, in case they pass the namespace check
                if ( $strippedElement == 'iframe' ) {
                        wfDebug( __METHOD__ . ": iframe in uploaded file.\n" );
 
-                       return true;
+                       return array( 'uploaded-script-svg', $strippedElement );
                }
 
                # Check <style> css
@@ -1383,7 +1363,7 @@ abstract class UploadBase {
                        && self::checkCssFragment( Sanitizer::normalizeCss( $data ) )
                ) {
                        wfDebug( __METHOD__ . ": hostile css in style element.\n" );
-                       return true;
+                       return array( 'uploaded-hostile-svg' );
                }
 
                foreach ( $attribs as $attrib => $value ) {
@@ -1394,7 +1374,7 @@ abstract class UploadBase {
                                wfDebug( __METHOD__
                                        . ": Found event-handler attribute '$attrib'='$value' in uploaded file.\n" );
 
-                               return true;
+                               return array( 'uploaded-event-handler-on-svg', $attrib, $value );
                        }
 
                        # href with non-local target (don't allow http://, javascript:, etc)
@@ -1408,7 +1388,7 @@ abstract class UploadBase {
                                        wfDebug( __METHOD__ . ": Found href attribute <$strippedElement "
                                                . "'$attrib'='$value' in uploaded file.\n" );
 
-                                       return true;
+                                       return array( 'uploaded-href-attribute-svg', $strippedElement, $attrib, $value );
                                }
                        }
 
@@ -1420,7 +1400,7 @@ abstract class UploadBase {
                                if ( !preg_match( "!^data:\s*image/(gif|jpeg|jpg|png)$parameters,!i", $value ) ) {
                                        wfDebug( __METHOD__ . ": Found href to unwhitelisted data: uri "
                                                . "\"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
-                                       return true;
+                                       return array( 'uploaded-href-unsafe-target-svg', $strippedElement, $attrib, $value );
                                }
                        }
 
@@ -1432,7 +1412,7 @@ abstract class UploadBase {
                                wfDebug( __METHOD__ . ": Found animate that might be changing href using from "
                                        . "\"<$strippedElement '$attrib'='$value'...\" in uploaded file.\n" );
 
-                               return true;
+                               return array( 'uploaded-animate-svg', $strippedElement, $attrib, $value );
                        }
 
                        # use set/animate to add event-handler attribute to parent
@@ -1443,7 +1423,7 @@ abstract class UploadBase {
                                wfDebug( __METHOD__ . ": Found svg setting event-handler attribute with "
                                        . "\"<$strippedElement $stripped='$value'...\" in uploaded file.\n" );
 
-                               return true;
+                               return array( 'uploaded-setting-event-handler-svg', $strippedElement, $stripped, $value );
                        }
 
                        # use set to add href attribute to parent element
@@ -1453,7 +1433,7 @@ abstract class UploadBase {
                        ) {
                                wfDebug( __METHOD__ . ": Found svg setting href attribute '$value' in uploaded file.\n" );
 
-                               return true;
+                               return array( 'uploaded-setting-href-svg' );
                        }
 
                        # use set to add a remote / data / script target to an element
@@ -1463,7 +1443,7 @@ abstract class UploadBase {
                        ) {
                                wfDebug( __METHOD__ . ": Found svg setting attribute to '$value' in uploaded file.\n" );
 
-                               return true;
+                               return array( 'uploaded-wrong-setting-svg', $value );
                        }
 
                        # use handler attribute with remote / data / script
@@ -1471,7 +1451,7 @@ abstract class UploadBase {
                                wfDebug( __METHOD__ . ": Found svg setting handler with remote/data/script "
                                        . "'$attrib'='$value' in uploaded file.\n" );
 
-                               return true;
+                               return array( 'uploaded-setting-handler-svg', $attrib, $value );
                        }
 
                        # use CSS styles to bring in remote code
@@ -1480,7 +1460,7 @@ abstract class UploadBase {
                        ) {
                                wfDebug( __METHOD__ . ": Found svg setting a style with "
                                        . "remote url '$attrib'='$value' in uploaded file.\n" );
-                               return true;
+                               return array( 'uploaded-remote-url-svg', $attrib, $value );
                        }
 
                        # Several attributes can include css, css character escaping isn't allowed
@@ -1491,7 +1471,7 @@ abstract class UploadBase {
                        ) {
                                wfDebug( __METHOD__ . ": Found svg setting a style with "
                                        . "remote url '$attrib'='$value' in uploaded file.\n" );
-                               return true;
+                               return array( 'uploaded-remote-url-svg', $attrib, $value );
                        }
 
                        # image filters can pull in url, which could be svg that executes scripts
@@ -1502,7 +1482,7 @@ abstract class UploadBase {
                                wfDebug( __METHOD__ . ": Found image filter with url: "
                                        . "\"<$strippedElement $stripped='$value'...\" in uploaded file.\n" );
 
-                               return true;
+                               return array( 'uploaded-image-filter-svg', $strippedElement, $stripped, $value );
                        }
                }