Third argument to unpack() requires PHP 7.1
authorAryeh Gregor <ayg@aryeh.name>
Wed, 10 Apr 2019 11:08:40 +0000 (14:08 +0300)
committerAryeh Gregor <ayg@aryeh.name>
Wed, 10 Apr 2019 11:14:42 +0000 (14:14 +0300)
On PHP 7.0, it looks like this code would have raised a warning and
given random results, because it would interpret the first byte of $tail
as the comment length instead of the correct one. Thanks for being
permissive about unrecognized function parameters, PHP!

(The actual reason I found and fixed this is because the phan annotation
here was giving me an error on PHP 7.3: "UnusedPluginSuppression Plugin
BuiltinSuppressionPlugin suppresses issue PhanParamTooManyInternal on
this line but this suppression is unused or suppressed elsewhere".)

Change-Id: I910f78698d1a53e8a90ddf243a4d65be87f29ca9

includes/libs/mime/MimeAnalyzer.php

index 413fb2a..a326df2 100644 (file)
@@ -806,9 +806,7 @@ EOT;
                if ( $eocdrPos !== false ) {
                        $this->logger->info( __METHOD__ . ": ZIP signature present in $file\n" );
                        // Check if it really is a ZIP file, make sure the EOCDR is at the end (T40432)
-                       // FIXME: unpack()'s third argument was added in PHP 7.1
-                       // @phan-suppress-next-line PhanParamTooManyInternal
-                       $commentLength = unpack( "n", $tail, $eocdrPos + 20 )[0];
+                       $commentLength = unpack( "n", substr( $tail, $eocdrPos + 20 ) )[0];
                        if ( $eocdrPos + 22 + $commentLength !== strlen( $tail ) ) {
                                $this->logger->info( __METHOD__ . ": ZIP EOCDR not at end. Not a ZIP file." );
                        } else {