mirror of
https://github.com/webmproject/libwebp.git
synced 2025-08-28 23:03:20 +02:00
Reasoning: The errors reported for `tokens` in `CodeRepeatedValues` (src/utils/huffman_encode_utils.c, lines 274, 283, 289, 294) indicated pointer arithmetic on a pointer assumed to be `__single`. Since `CodeRepeatedValues` is static and uses `tokens` as an iterator, its signature was changed to use `HuffmanTreeToken* __indexable` for both the parameter and return type. A similar static function, `CodeRepeatedZeros`, was also updated to use `__indexable` pointers. The caller, `VP8LCreateCompressedHuffmanTree`, passes a buffer `tokens` with size `max_tokens`. Its signature (in .c and .h files) was annotated to reflect this using `__counted_by(max_tokens)`. Because `__counted_by` requires the size parameter to be updated alongside the pointer if the pointer is modified, the implementation of `VP8LCreateCompressedHuffmanTree` was refactored. Instead of modifying the `tokens` parameter directly, a local iterator variable `current_token` was introduced and explicitly annotated as `__indexable` to ensure correct type propagation, especially when `WEBP_ASSUME_UNSAFE_INDEXABLE_ABI` is active. This local iterator is used for calls to `CodeRepeatedValues` and `CodeRepeatedZeros`. Bug: 432511821 Change-Id: I07fe553341a613a0ea4d5284817098c31f3aefeb