palette.c/.h
.
Reasoning: The `palette` parameter in `PaletteSortModifiedZeng` (src/utils/palette.c) was accessed using `palette[i]` in a loop from 0 to `num_colors` (line 386), indicating it's an array of size `num_colors`. The `palette_in` parameter was also deduced to be of size `num_colors` based on its usage and how the indices accessing it are generated. Therefore, both `palette` and `palette_in` were annotated with `WEBP_COUNTED_BY(num_colors)`. This change required updating the caller function `PaletteSort` (lines 393-395 in src/utils/palette.c and lines 61-63 in src/utils/palette.h) to match the new signature by adding the same annotations to its `palette_sorted` and `palette` parameters. The `palette` parameter in `PaletteHasNonMonotonousDeltas` was being indexed like an array but was typed as a `WEBP_SINGLE` pointer. Since `palette` is indexed up to `num_colors`, it was annotated with `WEBP_COUNTED_BY(num_colors)`. This introduced a warning at the call site in `PaletteSortMinimizeDeltas` (src/utils/palette.c:197), as it passed a `WEBP_SINGLE` pointer (`palette_sorted`) where `WEBP_COUNTED_BY` was expected. Analysis showed both `palette_sorted` and `palette` parameters in `PaletteSortMinimizeDeltas` are accessed up to `num_colors`, so they were annotated with `WEBP_COUNTED_BY(num_colors)`. The `sorted` parameter in `SearchColorNoIdx` was annotated with `__counted_by(num_colors)` in both the definition (src/utils/palette.c:68) and declaration (src/utils/palette.h:40). This change led to cascading errors during testing. These errors occurred because callers passed pointers that were considered `__unsafe_indexable` under this setting. To resolve this, the following functions were also annotated: - `PrepareMapToPalette` (src/utils/palette.c:85, src/utils/palette.h:46): `palette`, `sorted`, and `idx_map` were annotated with `__counted_by(num_colors)`. The pointer `cooccurrence` in `src/utils/palette.c` is used as a flattened 2D array of size `num_colors * num_colors` in functions `CoOccurrenceFindMax` (lines 226-252) and `CoOccurrenceBuild` (lines 255-300). The parameters in these functions were annotated with `WEBP_COUNTED_BY(num_colors * num_colors)` to reflect this usage and fix the original bounds safety errors during indexing. In the caller function `PaletteSortModifiedZeng` (lines 307-391), `cooccurrence` is a local variable allocated using `WebPSafeCalloc`. To ensure compatibility with the annotated parameters, especially during test builds where local variables appeared to be treated as unsafe pointers, `WEBP_UNSAFE_FORGE_BIDI_INDEXABLE` was used when passing `cooccurrence` to `CoOccurrenceBuild` (line 327) and `CoOccurrenceFindMax` (line 333). This ensures a pointer with the correct bounds is passed to the callees in all build configurations. Bug: 432511821 Change-Id: I7540968ecca67645c5ca57e542433971b235e582
WebP Codec
__ __ ____ ____ ____
/ \\/ \/ _ \/ _ )/ _ \
\ / __/ _ \ __/
\__\__/\____/\_____/__/ ____ ___
/ _/ / \ \ / _ \/ _/
/ \_/ / / \ \ __/ \__
\____/____/\_____/_____/____/v1.6.0
WebP codec is a library to encode and decode images in WebP format. This package contains the library that can be used in other programs to add WebP support, as well as the command line tools 'cwebp' and 'dwebp' to compress and decompress images respectively.
See https://developers.google.com/speed/webp for details on the image format.
The latest source tree is available at https://chromium.googlesource.com/webm/libwebp
It is released under the same license as the WebM project. See https://www.webmproject.org/license/software/ or the "COPYING" file for details. An additional intellectual property rights grant can be found in the file PATENTS.
Building
See the building documentation.
Encoding and Decoding Tools
The examples/ directory contains tools to encode and decode images and animations, view information about WebP images, and more. See the tools documentation.
APIs
See the APIs documentation, and API usage examples in the
examples/
directory.
Bugs
Please report all bugs to the issue tracker. For security reports, select 'Security report' from the Template dropdown.
Patches welcome! See how to contribute.
Discuss
Email: webp-discuss@webmproject.org
Web: https://groups.google.com/a/webmproject.org/group/webp-discuss