http://www.mediawiki.org/wiki/Special:Code/MediaWiki/99477

Revision: 99477
Author:   bawolff
Date:     2011-10-11 14:05:23 +0000 (Tue, 11 Oct 2011)
Log Message:
-----------
(bug 31588, sort of) Jpeg metadata code wasn't handling padding bytes properly.

Per the spec, segments can have arbitrary runs of 0xFF's between segments that 
should be skipped.

Modified Paths:
--------------
    trunk/phase3/includes/media/JpegMetadataExtractor.php

Modified: trunk/phase3/includes/media/JpegMetadataExtractor.php
===================================================================
--- trunk/phase3/includes/media/JpegMetadataExtractor.php       2011-10-11 
13:12:40 UTC (rev 99476)
+++ trunk/phase3/includes/media/JpegMetadataExtractor.php       2011-10-11 
14:05:23 UTC (rev 99477)
@@ -58,7 +58,7 @@
                                throw new MWException( 'Too many jpeg segments. 
Aborting' );
                        }
                        if ( $buffer !== "\xFF" ) {
-                               throw new MWException( "Error reading jpeg file 
marker" );
+                               throw new MWException( "Error reading jpeg file 
marker. Expected 0xFF but got " . bin2hex( $buffer ) );
                        }
 
                        $buffer = fread( $fh, 1 );
@@ -123,6 +123,9 @@
                        } elseif ( $buffer === "\xD9" || $buffer === "\xDA" ) {
                                // EOI - end of image or SOS - start of scan. 
either way we're past any interesting segments
                                return $segments;
+                       } elseif ( $buffer === "\xFF" ) {
+                               // Padding byte. Skip.
+                               continue;
                        } else {
                                // segment we don't care about, so skip
                                $size = unpack( "nint", fread( $fh, 2 ) );


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to