Merge "Bump min supported HHVM version to 3.18.5"
[lhc/web/wiklou.git] / includes / upload / UploadBase.php
index c335e2b..ddb4bba 100644 (file)
@@ -674,7 +674,10 @@ abstract class UploadBase {
                        $warnings['was-deleted'] = $filename;
                }
 
-               $dupes = $this->checkAgainstExistingDupes( $hash );
+               // If a file with the same name exists locally then the local file has already been tested
+               // for duplication of content
+               $ignoreLocalDupes = isset( $warnings[ 'exists '] );
+               $dupes = $this->checkAgainstExistingDupes( $hash, $ignoreLocalDupes );
                if ( $dupes ) {
                        $warnings['duplicate'] = $dupes;
                }
@@ -789,15 +792,19 @@ abstract class UploadBase {
 
        /**
         * @param string $hash sha1 hash of the file to check
+        * @param bool $ignoreLocalDupes True to ignore local duplicates
         *
         * @return File[] Duplicate files, if found.
         */
-       private function checkAgainstExistingDupes( $hash ) {
+       private function checkAgainstExistingDupes( $hash, $ignoreLocalDupes ) {
                $dupes = RepoGroup::singleton()->findBySha1( $hash );
                $title = $this->getTitle();
-               // Remove all matches against self
                foreach ( $dupes as $key => $dupe ) {
-                       if ( $title->equals( $dupe->getTitle() ) ) {
+                       if (
+                               ( $dupe instanceof LocalFile ) &&
+                               $ignoreLocalDupes &&
+                               $title->equals( $dupe->getTitle() )
+                       ) {
                                unset( $dupes[$key] );
                        }
                }
@@ -1656,9 +1663,8 @@ abstract class UploadBase {
                        # image/svg, text/xml, application/xml, and text/html, which can contain scripts
                        if ( $stripped == 'href' && strncasecmp( 'data:', $value, 5 ) === 0 ) {
                                // rfc2397 parameters. This is only slightly slower than (;[\w;]+)*.
-                               // @codingStandardsIgnoreStart Generic.Files.LineLength
+                               // phpcs:ignore Generic.Files.LineLength
                                $parameters = '(?>;[a-zA-Z0-9\!#$&\'*+.^_`{|}~-]+=(?>[a-zA-Z0-9\!#$&\'*+.^_`{|}~-]+|"(?>[\0-\x0c\x0e-\x21\x23-\x5b\x5d-\x7f]+|\\\\[\0-\x7f])*"))*(?:;base64)?';
-                               // @codingStandardsIgnoreEnd
 
                                if ( !preg_match( "!^data:\s*image/(gif|jpeg|jpg|png)$parameters,!i", $value ) ) {
                                        wfDebug( __METHOD__ . ": Found href to unwhitelisted data: uri "