RFR: 8356137: GifImageDecode can produce opaque image when disposal method changes
Jeremy Wood
duke at openjdk.org
Mon May 5 17:15:47 UTC 2025
On Mon, 5 May 2025 17:07:11 GMT, Jeremy Wood <duke at openjdk.org> wrote:
> This resolves a gif parsing bug where an unwanted opaque rectangle could appear under these conditions:
>
> 1. The disposal method for frames is 1 (meaning "do not dispose", aka "DISPOSAL_SAVE")
> 2. The transparent pixel is non-zero
> 3. There's more than one such consecutive frame
>
> Previously: the GifImageDecoder would leave the saved_image pixels as zero when they were supposed to be transparent. This works great if the transparent pixel index is zero, but it flood fills the background of your frame with the zeroeth color otherwise.
For reference, the commented out lines here are my first approach at resolving this problem.
<img width="687" alt="image" src="https://github.com/user-attachments/assets/8caa3372-ee42-412d-959c-6d55d258e4ba" />
This works, and it may be more readable/intuitive than this current PR. When we initialize saved_image we should flood fill it with transparent pixels.
I chose the approach in this PR though because it's lazier. (That is: it should be a little bit less work, CPU-wise.)
If anyone wants we can switch to this approach.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/25044#issuecomment-2851693643
More information about the client-libs-dev
mailing list