Commit 16e1b2f8 for libheif
commit 16e1b2f812a0f55aff1b122717fbefdf791ca8cf
Author: Dirk Farin <dirk.farin@gmail.com>
Date: Mon Aug 24 21:03:38 2026 +0200
fix GCC false positive warning giving CI errors
diff --git a/tests/decompression_bomb.cc b/tests/decompression_bomb.cc
index 4b40e7a6..8fdd8499 100644
--- a/tests/decompression_bomb.cc
+++ b/tests/decompression_bomb.cc
@@ -76,19 +76,20 @@ std::vector<uint8_t> make_box(const char fourcc[4],
bool is_full_box = false,
uint8_t version = 0,
uint32_t flags = 0) {
- std::vector<uint8_t> body;
- if (is_full_box) {
- body.push_back(version);
- body.push_back(static_cast<uint8_t>(flags >> 16));
- body.push_back(static_cast<uint8_t>(flags >> 8));
- body.push_back(static_cast<uint8_t>(flags));
- }
- body.insert(body.end(), payload.begin(), payload.end());
+ const size_t header_size = is_full_box ? 12 : 8;
std::vector<uint8_t> box;
- put_u32_be(box, static_cast<uint32_t>(8 + body.size()));
+ box.reserve(header_size + payload.size());
+
+ put_u32_be(box, static_cast<uint32_t>(header_size + payload.size()));
append_fourcc(box, fourcc);
- box.insert(box.end(), body.begin(), body.end());
+ if (is_full_box) {
+ box.push_back(version);
+ box.push_back(static_cast<uint8_t>(flags >> 16));
+ box.push_back(static_cast<uint8_t>(flags >> 8));
+ box.push_back(static_cast<uint8_t>(flags));
+ }
+ append(box, payload);
return box;
}
@@ -172,10 +173,12 @@ std::vector<uint8_t> build_heif_with_brotli_mime(const std::vector<uint8_t>& bro
auto iprp = make_box("iprp", iprp_payload);
// idat: 64 bytes of raw 8x8 8bpp mask data, followed by the brotli bomb payload.
- std::vector<uint8_t> idat_payload(64, 0x7F);
+ std::vector<uint8_t> idat_payload;
+ idat_payload.reserve(64 + brotli_payload.size());
+ idat_payload.resize(64, 0x7F);
const uint32_t bomb_offset = static_cast<uint32_t>(idat_payload.size());
const uint32_t bomb_length = static_cast<uint32_t>(brotli_payload.size());
- idat_payload.insert(idat_payload.end(), brotli_payload.begin(), brotli_payload.end());
+ append(idat_payload, brotli_payload);
auto idat = make_box("idat", idat_payload);
// iloc (version 1): both items store their data in idat (construction_method=1).