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}));
}
//------------------------------------------------------------------------------