Arman Hasanzadeh 52135b8e00 Add fbounds-safety annotations in 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
2025-08-20 08:27:00 -07:00
2025-07-31 14:53:58 -07:00
2021-01-02 15:51:55 -08:00
2025-07-31 14:53:58 -07:00
2013-12-29 11:56:21 -05:00
2025-04-16 18:53:36 -07:00
2025-07-31 20:54:06 -07:00
2025-05-16 12:43:52 -07:00
2025-07-31 14:53:58 -07:00
2025-08-01 13:14:54 -07:00
2023-05-30 13:54:06 -07:00
2021-01-02 15:51:55 -08:00
2024-06-01 10:21:54 -05:00
2025-06-30 12:26:05 -07:00
2025-06-30 12:26:05 -07:00
2025-07-07 17:20:00 -07:00
2018-11-07 19:12:35 -08:00
2025-08-14 12:03:57 -07:00
2010-09-30 09:55:07 -04:00
2016-05-24 15:35:20 +02:00
2021-01-02 15:51:55 -08:00
2021-01-02 15:51:55 -08:00
2025-03-28 11:44:03 +01:00
2025-06-30 12:26:15 -07:00
2015-04-18 08:46:53 -07:00
2025-06-30 12:26:15 -07:00

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

Description
Mirror only. Please do not send pull requests. See https://chromium.googlesource.com/webm/libwebp/+/HEAD/CONTRIBUTING.md.
Readme 19 MiB
Languages
C 94.3%
C++ 1.4%
CMake 1.1%
Shell 1.1%
M4 1%
Other 1%