From 15b1de13da0348430aaa42b76450602a8747fa2b Mon Sep 17 00:00:00 2001 From: Arman Hasanzadeh Date: Fri, 15 Aug 2025 10:08:16 -0700 Subject: [PATCH] Add fbounds-safety annotations for `code_lengths`. Reasoning: The compiler reported an error in `src/utils/huffman_utils.c` at line 230 because the array parameter `code_lengths` decayed to a `__single` pointer, which disallows pointer arithmetic. The parameter `code_lengths_size` represents the size of the `code_lengths` array. To fix this, the `code_lengths` parameter in the definition of `VP8LBuildHuffmanTable` (line 230) and its declaration in `src/utils/huffman_utils.h` (line 108) were annotated with `WEBP_COUNTED_BY(code_lengths_size)`. Bug: 432511821 Change-Id: Id0b32ca283bba5938320abbdbe61846e2d538c5d --- src/utils/huffman_utils.c | 4 +++- src/utils/huffman_utils.h | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/utils/huffman_utils.c b/src/utils/huffman_utils.c index 5b60a00e..8f12eac1 100644 --- a/src/utils/huffman_utils.c +++ b/src/utils/huffman_utils.c @@ -227,7 +227,9 @@ static int BuildHuffmanTable(HuffmanCode* const root_table, int root_bits, // Cut-off value for switching between heap and stack allocation. #define SORTED_SIZE_CUTOFF 512 int VP8LBuildHuffmanTable(HuffmanTables* const root_table, int root_bits, - const int code_lengths[], int code_lengths_size) { + const int WEBP_COUNTED_BY(code_lengths_size) + code_lengths[], + int code_lengths_size) { const int total_size = BuildHuffmanTable(NULL, root_bits, code_lengths, code_lengths_size, NULL); assert(code_lengths_size <= MAX_CODE_LENGTHS_SIZE); diff --git a/src/utils/huffman_utils.h b/src/utils/huffman_utils.h index 1468b07b..564de56f 100644 --- a/src/utils/huffman_utils.h +++ b/src/utils/huffman_utils.h @@ -105,10 +105,10 @@ void VP8LHtreeGroupsFree(HTreeGroup* const htree_groups); // the huffman table. // Returns built table size or 0 in case of error (invalid tree or // memory error). -WEBP_NODISCARD int VP8LBuildHuffmanTable(HuffmanTables* const root_table, - int root_bits, - const int code_lengths[], - int code_lengths_size); +WEBP_NODISCARD int VP8LBuildHuffmanTable( + HuffmanTables* const root_table, int root_bits, + const int WEBP_COUNTED_BY(code_lengths_size) code_lengths[], + int code_lengths_size); #ifdef __cplusplus } // extern "C"