Merge "MediaWikiTestCase: Fix schema restoration"
[lhc/web/wiklou.git] / includes / media / Exif.php
index cd457f0..0fde386 100644 (file)
@@ -20,7 +20,7 @@
  * @ingroup Media
  * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
  * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason, 2009 Brent Garber
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License
+ * @license GPL-2.0-or-later
  * @see http://exif.org/Exif2-2.PDF The Exif 2.2 specification
  * @file
  */
@@ -290,11 +290,11 @@ class Exif {
                        $this->byteOrder = 'BE'; // BE seems about twice as popular as LE in jpg's.
                }
 
-               $this->debugFile( $this->basename, __FUNCTION__, true );
+               $this->debugFile( __FUNCTION__, true );
                if ( function_exists( 'exif_read_data' ) ) {
-                       MediaWiki\suppressWarnings();
+                       Wikimedia\suppressWarnings();
                        $data = exif_read_data( $this->file, 0, true );
-                       MediaWiki\restoreWarnings();
+                       Wikimedia\restoreWarnings();
                } else {
                        throw new MWException( "Internal error: exif_read_data not present. " .
                                "\$wgShowEXIF may be incorrectly set or not checked by an extension." );
@@ -455,8 +455,7 @@ class Exif {
                        $val = substr( $this->mFilteredExifData[$prop], 8 );
 
                        switch ( $charCode ) {
-                               case "\x4A\x49\x53\x00\x00\x00\x00\x00":
-                                       // JIS
+                               case "JIS\x00\x00\x00\x00\x00":
                                        $charset = "Shift-JIS";
                                        break;
                                case "UNICODE\x00":
@@ -467,17 +466,17 @@ class Exif {
                                        break;
                        }
                        if ( $charset ) {
-                               MediaWiki\suppressWarnings();
+                               Wikimedia\suppressWarnings();
                                $val = iconv( $charset, 'UTF-8//IGNORE', $val );
-                               MediaWiki\restoreWarnings();
+                               Wikimedia\restoreWarnings();
                        } else {
                                // if valid utf-8, assume that, otherwise assume windows-1252
                                $valCopy = $val;
                                UtfNormal\Validator::quickIsNFCVerify( $valCopy ); // validates $valCopy.
                                if ( $valCopy !== $val ) {
-                                       MediaWiki\suppressWarnings();
+                                       Wikimedia\suppressWarnings();
                                        $val = iconv( 'Windows-1252', 'UTF-8//IGNORE', $val );
-                                       MediaWiki\restoreWarnings();
+                                       Wikimedia\restoreWarnings();
                                }
                        }
 
@@ -742,12 +741,16 @@ class Exif {
                                $ecount = 1; // checking individual elements
                        }
                }
-               $count = count( $val );
-               if ( $ecount != $count ) {
-                       $this->debug( $val, __FUNCTION__, "Expected $ecount elements for $tag but got $count" );
 
-                       return false;
+               $count = 1;
+               if ( is_array( $val ) ) {
+                       $count = count( $val );
+                       if ( $ecount != $count ) {
+                               $this->debug( $val, __FUNCTION__, "Expected $ecount elements for $tag but got $count" );
+                               return false;
+                       }
                }
+               // If there are multiple values, recursively validate each of them.
                if ( $count > 1 ) {
                        foreach ( $val as $v ) {
                                if ( !$this->validate( $section, $tag, $v, true ) ) {