Fix $kAlphaStr in PHP libavifinfo implementation
PHP strings do not behave exactly like C string literals.
Fix for https://github.com/WordPress/wordpress-develop/pull/4612
Add more test cases in avifinfo_test.php.
Change-Id: I00194cb141a860ac5547cc2238907e591cc24156
diff --git a/avifinfo.php b/avifinfo.php
index 84a2e93..f4e9429 100644
--- a/avifinfo.php
+++ b/avifinfo.php
@@ -444,7 +444,7 @@
} else if ( $box->type == 'auxC' ) {
// See AV1 Image File Format (AVIF) 4
// at https://aomediacodec.github.io/av1-avif/#auxiliary-images
- $kAlphaStr = "urn:mpeg:mpegB:cicp:systems:auxiliary:alpha";
+ $kAlphaStr = "urn:mpeg:mpegB:cicp:systems:auxiliary:alpha\0";
$kAlphaStrLength = 44; // Includes terminating character.
if ( $box->content_size >= $kAlphaStrLength ) {
if ( !( $data = read( $this->handle, $kAlphaStrLength ) ) ) {
diff --git a/tests/avifinfo_test.php b/tests/avifinfo_test.php
index 4b03f9c..cbdf49e 100644
--- a/tests/avifinfo_test.php
+++ b/tests/avifinfo_test.php
@@ -15,21 +15,31 @@
require_once('../avifinfo.php');
-$features = array( 'width' => false, 'height' => false,
- 'bit_depth' => false, 'num_channels' => false );
-$handle = fopen( 'avifinfo_test_1x1.avif', 'rb' );
-if ( $handle ) {
- $parser = new Avifinfo\Parser( $handle );
- $success = $parser->parse_ftyp() && $parser->parse_file();
- fclose( $handle );
- if ( $success ) {
- $features = $parser->features->primary_item_features;
+function test_avifinfo_parser( $file_name, $expected_width, $expected_height,
+ $expected_bit_depth, $expected_num_channels ) {
+ $features = array( 'width' => false, 'height' => false,
+ 'bit_depth' => false, 'num_channels' => false );
+ $handle = fopen( $file_name, 'rb' );
+ if ( $handle ) {
+ $parser = new Avifinfo\Parser( $handle );
+ $success = $parser->parse_ftyp() && $parser->parse_file();
+ fclose( $handle );
+ if ( $success ) {
+ $features = $parser->features->primary_item_features;
+ }
+ }
+
+ if ( $features['width'] != $expected_width ||
+ $features['height'] != $expected_height ||
+ $features['bit_depth'] != $expected_bit_depth ||
+ $features['num_channels'] != $expected_num_channels ) {
+ echo 'Failure: '.$file_name.PHP_EOL;
+ } else {
+ echo 'Success: '.$file_name.PHP_EOL;
}
}
-if ( !$features['width'] || !$features['height'] ||
- !$features['bit_depth'] || !$features['num_channels'] ) {
- echo 'Failure'.PHP_EOL;
-} else {
- echo 'Success'.PHP_EOL;
-}
+test_avifinfo_parser('avifinfo_test_1x1.avif', 1, 1, 8, 3);
+test_avifinfo_parser('avifinfo_test_2x2_alpha.avif', 2, 2, 8, 4);
+test_avifinfo_parser('avifinfo_test_1x1_10b_nopixi_metasize64b_mdatsize0.avif',
+ 1, 1, 10, 3);