Remove unused num_read_bytes Change-Id: I6220ec6fd1d3e89e9ef2233df0219edcb954fc73
diff --git a/avifinfo.c b/avifinfo.c index ba6f75d..88a6e11 100644 --- a/avifinfo.c +++ b/avifinfo.c
@@ -94,7 +94,6 @@ read_stream_t read; // Used to fetch more bytes from the 'stream'. skip_stream_t skip; // Used to advance the position in the 'stream'. // Fallback to 'read' if 'skip' is null. - uint32_t num_read_bytes; // Total number of read bytes. } AvifInfoInternalStream; // Reads 'num_bytes' from the 'stream'. They are available at '*data'. @@ -103,7 +102,6 @@ AvifInfoInternalStream* stream, uint32_t num_bytes, const uint8_t** data) { *data = stream->read(stream->stream, num_bytes); AVIFINFO_CHECK(*data != NULL, kTruncated); - stream->num_read_bytes += num_bytes; return kFound; } @@ -122,7 +120,6 @@ return AvifInfoInternalRead(stream, num_bytes, &unused); } stream->skip(stream->stream, num_bytes); - stream->num_read_bytes += num_bytes; } return kFound; } @@ -270,8 +267,6 @@ box->size = num_remaining_bytes; } AVIFINFO_CHECK(box->size >= box_header_size, kInvalid); - AVIFINFO_CHECK(box->size <= AVIFINFO_MAX_SIZE - stream->num_read_bytes, - kAborted); AVIFINFO_CHECK(box->size <= num_remaining_bytes, kInvalid); const int has_fullbox_header = @@ -706,7 +701,6 @@ internal_stream.stream = stream; internal_stream.read = read; internal_stream.skip = skip; // Fallbacks to 'read' if null. - internal_stream.num_read_bytes = 0; uint32_t num_parsed_boxes = 0; AvifInfoInternalFeatures internal_features; memset(&internal_features, AVIFINFO_UNDEFINED, sizeof(internal_features));
diff --git a/tests/avifinfo_test.cc b/tests/avifinfo_test.cc index 108881d..0ab2ac7 100644 --- a/tests/avifinfo_test.cc +++ b/tests/avifinfo_test.cc
@@ -29,6 +29,11 @@ : Data(); } +bool AreEqual(const AvifInfoFeatures& a, const AvifInfoFeatures& b) { + return a.width == b.width && a.height == b.height && + a.bit_depth == b.bit_depth && a.num_channels == b.num_channels; +} + //------------------------------------------------------------------------------ // Positive tests @@ -38,10 +43,7 @@ AvifInfoFeatures features; EXPECT_EQ(AvifInfoGet(input.data(), input.size(), &features), kAvifInfoOk); - EXPECT_EQ(features.width, 1u); - EXPECT_EQ(features.height, 1u); - EXPECT_EQ(features.bit_depth, 8u); - EXPECT_EQ(features.num_channels, 3u); + EXPECT_TRUE(AreEqual(features, {1u, 1u, 8u, 3u})); } TEST(AvifInfoGetTest, NoPixi10b) { @@ -54,10 +56,7 @@ AvifInfoFeatures features; EXPECT_EQ(AvifInfoGet(input.data(), input.size(), &features), kAvifInfoOk); - EXPECT_EQ(features.width, 1u); - EXPECT_EQ(features.height, 1u); - EXPECT_EQ(features.bit_depth, 10u); - EXPECT_EQ(features.num_channels, 3u); + EXPECT_TRUE(AreEqual(features, {1u, 1u, 10u, 3u})); } TEST(AvifInfoGetTest, EnoughBytes) { @@ -70,10 +69,21 @@ AvifInfoFeatures features; EXPECT_EQ(AvifInfoGet(input.data(), input.size(), &features), kAvifInfoOk); - EXPECT_EQ(features.width, 1u); - EXPECT_EQ(features.height, 1u); - EXPECT_EQ(features.bit_depth, 8u); - EXPECT_EQ(features.num_channels, 3u); + EXPECT_TRUE(AreEqual(features, {1u, 1u, 8u, 3u})); +} + +TEST(AvifInfoGetTest, BigMetaBox) { + Data input = LoadFile("avifinfo_test_1x1.avif"); + ASSERT_FALSE(input.empty()); + // Change "meta" box size to the size 2^32-1. + const uint8_t kMetaTag[] = {'m', 'e', 't', 'a'}; + auto meta_tag = + std::search(input.begin(), input.end(), kMetaTag, kMetaTag + 4); + meta_tag[-4] = meta_tag[-3] = meta_tag[-2] = meta_tag[-1] = 255; + + AvifInfoFeatures features; + EXPECT_EQ(AvifInfoGet(input.data(), input.size(), &features), kAvifInfoOk); + EXPECT_TRUE(AreEqual(features, {1u, 1u, 8u, 3u})); } TEST(AvifInfoGetTest, Null) { @@ -89,10 +99,7 @@ TEST(AvifInfoGetTest, Empty) { AvifInfoFeatures features; EXPECT_EQ(AvifInfoGet(nullptr, 0, &features), kAvifInfoNotEnoughData); - EXPECT_EQ(features.width, 0u); - EXPECT_EQ(features.height, 0u); - EXPECT_EQ(features.bit_depth, 0u); - EXPECT_EQ(features.num_channels, 0u); + EXPECT_TRUE(AreEqual(features, {0})); } TEST(AvifInfoGetTest, NotEnoughBytes) { @@ -118,28 +125,24 @@ AvifInfoFeatures features; EXPECT_EQ(AvifInfoGet(input.data(), input.size(), &features), kAvifInfoInvalidFile); - EXPECT_EQ(features.width, 0u); - EXPECT_EQ(features.height, 0u); - EXPECT_EQ(features.bit_depth, 0u); - EXPECT_EQ(features.num_channels, 0u); + EXPECT_TRUE(AreEqual(features, {0})); } TEST(AvifInfoGetTest, MetaBoxIsTooBig) { Data input = LoadFile("avifinfo_test_1x1.avif"); ASSERT_FALSE(input.empty()); - // Change "meta" box size to the maximum size 2^32-1. + // Change "meta" box size to the maximum size 2^64-1. const uint8_t kMetaTag[] = {'m', 'e', 't', 'a'}; auto meta_tag = std::search(input.begin(), input.end(), kMetaTag, kMetaTag + 4); - meta_tag[-4] = meta_tag[-3] = meta_tag[-2] = meta_tag[-1] = 255; + meta_tag[-4] = meta_tag[-3] = meta_tag[-2] = 0; + meta_tag[-1] = 1; // 32-bit "1" then 4-char "meta" then 64-bit size. + input.insert(meta_tag + 4, {255, 255, 255, 255, 255, 255, 255, 255}); AvifInfoFeatures features; EXPECT_EQ(AvifInfoGet(input.data(), input.size(), &features), kAvifInfoTooComplex); - EXPECT_EQ(features.width, 0u); - EXPECT_EQ(features.height, 0u); - EXPECT_EQ(features.bit_depth, 0u); - EXPECT_EQ(features.num_channels, 0u); + EXPECT_TRUE(AreEqual(features, {0})); } TEST(AvifInfoGetTest, TooManyBoxes) { @@ -164,10 +167,7 @@ EXPECT_EQ(AvifInfoRead(/*stream=*/nullptr, /*read=*/nullptr, /*skip=*/nullptr, &features), kAvifInfoNotEnoughData); - EXPECT_EQ(features.width, 0u); - EXPECT_EQ(features.height, 0u); - EXPECT_EQ(features.bit_depth, 0u); - EXPECT_EQ(features.num_channels, 0u); + EXPECT_TRUE(AreEqual(features, {0})); } //------------------------------------------------------------------------------