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