Commit bb9fc2c2 for libheif
commit bb9fc2c208ea150dccfe53aa3b7cdcb12eda80ba
Author: Dirk Farin <dirk.farin@gmail.com>
Date: Thu Jun 25 13:29:16 2026 +0200
use size_t in BitReader (#1837)
diff --git a/libheif/bitstream.cc b/libheif/bitstream.cc
index be29548e..c4cd290a 100644
--- a/libheif/bitstream.cc
+++ b/libheif/bitstream.cc
@@ -537,7 +537,7 @@ void BitstreamRange::skip_without_advancing_file_pos(size_t n)
}
-BitReader::BitReader(const uint8_t* buffer, int len)
+BitReader::BitReader(const uint8_t* buffer, size_t len)
: data_start(buffer),
data_length(len)
{
diff --git a/libheif/bitstream.h b/libheif/bitstream.h
index 9cd3928f..c04de251 100644
--- a/libheif/bitstream.h
+++ b/libheif/bitstream.h
@@ -408,7 +408,7 @@ private:
class BitReader
{
public:
- BitReader(const uint8_t* buffer, int len);
+ BitReader(const uint8_t* buffer, size_t len);
void reset();
@@ -447,7 +447,7 @@ public:
bool get_svlc(int32_t* value);
- int get_current_byte_index() const
+ size_t get_current_byte_index() const
{
return data_length - bytes_remaining - nextbits_cnt / 8;
}
@@ -460,8 +460,8 @@ public:
private:
const uint8_t* const data_start;
const uint8_t* data;
- const int data_length;
- int bytes_remaining;
+ const size_t data_length;
+ size_t bytes_remaining;
uint64_t nextbits; // left-aligned bits
int nextbits_cnt;
diff --git a/libheif/codecs/avc_boxes.cc b/libheif/codecs/avc_boxes.cc
index 8d7d82ef..d37808ca 100644
--- a/libheif/codecs/avc_boxes.cc
+++ b/libheif/codecs/avc_boxes.cc
@@ -351,7 +351,7 @@ Error parse_sps_for_avcC_configuration(const uint8_t* sps, size_t size,
size = sps_no_emul.size();
- BitReader reader(sps, (int) size);
+ BitReader reader(sps, size);
// skip NAL header
reader.skip_bits(8);
diff --git a/libheif/codecs/hevc_boxes.cc b/libheif/codecs/hevc_boxes.cc
index 0ff74e89..18bd08ae 100644
--- a/libheif/codecs/hevc_boxes.cc
+++ b/libheif/codecs/hevc_boxes.cc
@@ -503,7 +503,7 @@ Error decode_hevc_aux_sei_messages(const std::vector<uint8_t>& data,
// TODO: we probably do not need a full BitReader just for the array size.
// Read this and the NAL size directly on the array data.
- BitReader reader(data.data(), (int) data.size());
+ BitReader reader(data.data(), data.size());
if (reader.get_bits_remaining() < 32) {
return {heif_error_Invalid_input,
heif_suberror_End_of_data,
@@ -516,10 +516,10 @@ Error decode_hevc_aux_sei_messages(const std::vector<uint8_t>& data,
// ERROR: read past end of data
}
- while (reader.get_current_byte_index() < (int) len) {
- int currPos = reader.get_current_byte_index();
+ while (reader.get_current_byte_index() < len) {
+ size_t currPos = reader.get_current_byte_index();
- BitReader sei_reader(data.data() + currPos, (int) data.size() - currPos);
+ BitReader sei_reader(data.data() + currPos, data.size() - currPos);
if (sei_reader.get_bits_remaining() < 32+8) {
return {heif_error_Invalid_input,
@@ -604,7 +604,7 @@ Error parse_sps_for_hvcC_configuration(const uint8_t* sps, size_t size,
size = sps_no_emul.size();
- BitReader reader(sps, (int) size);
+ BitReader reader(sps, size);
// skip NAL header
reader.skip_bits(2 * 8);
diff --git a/libheif/codecs/uncompressed/unc_decoder_legacybase.h b/libheif/codecs/uncompressed/unc_decoder_legacybase.h
index a6ffd9ea..65cba3cd 100644
--- a/libheif/codecs/uncompressed/unc_decoder_legacybase.h
+++ b/libheif/codecs/uncompressed/unc_decoder_legacybase.h
@@ -45,7 +45,7 @@
class UncompressedBitReader : public BitReader
{
public:
- UncompressedBitReader(const std::vector<uint8_t>& data) : BitReader(data.data(), (int) data.size()) {}
+ UncompressedBitReader(const std::vector<uint8_t>& data) : BitReader(data.data(), data.size()) {}
void markPixelStart()
{
@@ -65,7 +65,7 @@ public:
inline Error handlePixelAlignment(uint32_t pixel_size)
{
if (pixel_size != 0) {
- uint32_t bytes_in_pixel = get_current_byte_index() - m_pixelStartOffset;
+ uint32_t bytes_in_pixel = static_cast<uint32_t>(get_current_byte_index() - m_pixelStartOffset);
if (pixel_size > bytes_in_pixel) {
uint32_t padding = pixel_size - bytes_in_pixel;
skip_bytes(padding);
@@ -89,7 +89,7 @@ public:
{
skip_to_byte_boundary();
if (alignment != 0) {
- uint32_t bytes_in_row = get_current_byte_index() - m_rowStartOffset;
+ uint32_t bytes_in_row = static_cast<uint32_t>(get_current_byte_index() - m_rowStartOffset);
uint32_t residual = bytes_in_row % alignment;
if (residual != 0) {
uint32_t padding = alignment - residual;
@@ -101,7 +101,7 @@ public:
void handleTileAlignment(uint32_t alignment)
{
if (alignment != 0) {
- uint32_t bytes_in_tile = get_current_byte_index() - m_tileStartOffset;
+ uint32_t bytes_in_tile = static_cast<uint32_t>(get_current_byte_index() - m_tileStartOffset);
uint32_t residual = bytes_in_tile % alignment;
if (residual != 0) {
uint32_t tile_padding = alignment - residual;
@@ -111,9 +111,9 @@ public:
}
private:
- int m_pixelStartOffset = 0;
- int m_rowStartOffset = 0;
- int m_tileStartOffset = 0;
+ size_t m_pixelStartOffset = 0;
+ size_t m_rowStartOffset = 0;
+ size_t m_tileStartOffset = 0;
};
diff --git a/libheif/codecs/vvc_boxes.cc b/libheif/codecs/vvc_boxes.cc
index a8344c0c..96f16871 100644
--- a/libheif/codecs/vvc_boxes.cc
+++ b/libheif/codecs/vvc_boxes.cc
@@ -425,7 +425,7 @@ Error parse_sps_for_vvcC_configuration(const uint8_t* sps, size_t size,
sps = sps_no_emul.data();
size = sps_no_emul.size();
- BitReader reader(sps, (int) size);
+ BitReader reader(sps, size);
// skip NAL header
reader.skip_bits(2 * 8);
diff --git a/libheif/mini.cc b/libheif/mini.cc
index cac37881..27720624 100644
--- a/libheif/mini.cc
+++ b/libheif/mini.cc
@@ -56,12 +56,7 @@ Error Box_mini::parse(BitstreamRange &range, const heif_security_limits *limits)
return range.get_error();
}
- if (mini_data.size() > static_cast<size_t>(std::numeric_limits<int>::max())) {
- return {heif_error_Invalid_input,
- heif_suberror_Invalid_mini_box,
- "Payload too large in MinimizedImageBox"};
- }
- BitReader bits(mini_data.data(), (int)(mini_data.size()));
+ BitReader bits(mini_data.data(), mini_data.size());
m_version = bits.get_bits8(2);
m_explicit_codec_types_flag = bits.get_flag();
diff --git a/libheif/plugins/decoder_webcodecs.cc b/libheif/plugins/decoder_webcodecs.cc
index bda1e562..c302f359 100644
--- a/libheif/plugins/decoder_webcodecs.cc
+++ b/libheif/plugins/decoder_webcodecs.cc
@@ -215,7 +215,7 @@ Error parse_sps_for_hvcC_configuration2(const uint8_t* sps, size_t size,
size = sps_no_emul.size();
- BitReader reader(sps, (int) size);
+ BitReader reader(sps, size);
// skip NAL header
reader.skip_bits(2 * 8);