Add wfUnserialize() wrapper around unserialize to prevent E_NOTICE and use it in...
authorBryan Tong Minh <btongminh@users.mediawiki.org>
Wed, 29 Jun 2011 20:24:53 +0000 (20:24 +0000)
committerBryan Tong Minh <btongminh@users.mediawiki.org>
Wed, 29 Jun 2011 20:24:53 +0000 (20:24 +0000)
includes/GlobalFunctions.php
includes/media/ExifBitmap.php
tests/phpunit/includes/GlobalFunctions.php/GlobalTest.php
tests/phpunit/includes/media/FormatMetadataTest.php

index c66b0e8..f3f646f 100644 (file)
@@ -3549,3 +3549,17 @@ function wfGetParserCacheStorage() {
 function wfRunHooks( $event, $args = array() ) {
        return Hooks::run( $event, $args );
 }
+
+/**
+ * Unserialize a string to a PHP value without throwing E_NOTICE. Simply a 
+ * wrapper around unserialize()
+ * 
+ * @param $data string The serialized string
+ * @return mixed
+ */
+function wfUnserialize( $data ) {
+       wfSuppressWarnings();
+       $result = unserialize( $data );
+       wfRestoreWarnings();
+       return $result;
+}
index b63ef18..42a2fd6 100644 (file)
@@ -109,7 +109,7 @@ class ExifBitmapHandler extends BitmapHandler {
                        return false;
                }
 
-               $exif = unserialize( $metadata );
+               $exif = wfUnserialize( $metadata );
                if ( !$exif ) {
                        return false;
                }
index b06dbf1..0ded96f 100644 (file)
@@ -879,6 +879,12 @@ class GlobalTest extends MediaWikiTestCase {
                        // are less consistent.
                );
        }
+       
+       public function testUnserialize() {
+               $this->assertEquals( '', wfUnserialize( 's:0:"";') );
+               $this->assertEquals( false, wfUnserialize( '0' ),
+                       'Invalid input to unserialize()' );
+       }
 
        /* TODO: many more! */
 }
index 98c8013..c4c48b5 100644 (file)
@@ -1,11 +1,17 @@
 <?php
 class FormatMetadataTest extends MediaWikiTestCase {
        public function testInvalidDate() {
+               global $wgShowEXIF;
+               if ( !$wgShowEXIF ) {
+                       $this->markTestIncomplete( "This test needs the exif extension." );
+               }
+               
                $file = UnregisteredLocalFile::newFromPath( dirname( __FILE__ ) . 
                        '/broken_exif_date.jpg', 'image/jpeg' );
                
                // Throws an error if bug hit
                $meta = $file->formatMetadata();
+               $this->assertNotEquals( false, $meta, 'Valid metadata extracted' );
                
                // Find date exif entry
                $this->assertArrayHasKey( 'visible', $meta );