RFR: 8356137: GifImageDecode can produce opaque image when disposal method changes
Mikhail Yankelevich
myankelevich at openjdk.org
Tue May 6 10:48:16 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.
Just a few questions.
Also, a copyright in GifImageDecoder.java
test/jdk/sun/awt/image/gif/bug8356137/GifEmptyBackgroundTest.java line 2:
> 1: /*
> 2: * Copyright (c) 2002, 2025, Oracle and/or its affiliates. All rights reserved.
Nitpick: do you need 2002 here? Isn't it a new file?
test/jdk/sun/awt/image/gif/bug8356137/GifEmptyBackgroundTest.java line 28:
> 26: * @bug 8356137
> 27: * @summary This test verifies a non-zero transparent pixel in gifs works when
> 28: * the disposal method changes from 2 to 1, and when the
Nitpick: Do you need the `, and when the` ? 😄
test/jdk/sun/awt/image/gif/bug8356137/GifEmptyBackgroundTest.java line 51:
> 49: boolean pass = true;
> 50: if (new Color(frames[3].getRGB(20, 20), true).getAlpha() != 0) {
> 51: System.err.println("Sampling at (20,20) failed");
Do you think it would be cleaner if you jsut throw a `RuntimeException("Sampling at (20,20) failed");` instead of the whole
System.err.println("Sampling at (20,20) failed");
pass = false;
}
if (!pass)
throw new Error("See System.err for details");
?
It should result in the same level of details but with better readability imo
test/jdk/sun/awt/image/gif/bug8356137/GifEmptyBackgroundTest.java line 105:
> 103: // we don't expect this to happen, but if something goes
> 104: // wrong nobody else will print our stacktrace for us:
> 105: e.printStackTrace();
Do you need this print here? Runtime exception should print it out anyway to the system.error afaik
test/jdk/sun/awt/image/gif/bug8356137/GifEmptyBackgroundTest.java line 133:
> 131: }
> 132: } catch(Exception e) {
> 133: e.printStackTrace();
Do you need to print out the stack trace here when you are throwing it below?
test/jdk/sun/awt/image/gif/bug8356137/GifEmptyBackgroundTest.java line 143:
> 141: return returnValue.toArray(new BufferedImage[0]);
> 142: }
> 143: }
nitpick: could you please add a new line here for github? 😃
-------------
PR Review: https://git.openjdk.org/jdk/pull/25044#pullrequestreview-2817764726
PR Review Comment: https://git.openjdk.org/jdk/pull/25044#discussion_r2075186796
PR Review Comment: https://git.openjdk.org/jdk/pull/25044#discussion_r2075200131
PR Review Comment: https://git.openjdk.org/jdk/pull/25044#discussion_r2075190122
PR Review Comment: https://git.openjdk.org/jdk/pull/25044#discussion_r2075197940
PR Review Comment: https://git.openjdk.org/jdk/pull/25044#discussion_r2075193365
PR Review Comment: https://git.openjdk.org/jdk/pull/25044#discussion_r2075192144
More information about the client-libs-dev
mailing list