I do not have much background in LZW compression or in C, but I'm reasonably 
confident this resolves the problem I'm observing. It looks like the 
GifImageDecoder was not always correctly handling compression codes after the 
table reached its limit of ~4096. If anyone has suggestions for improvements 
I'm happy to make adjustments.

Luckily while debugging this: I was able to compare the flawed implementation 
(GifImageDecoder) with ImageIO's implementation (GIFImageReader) to help 
identify how the suffix/prefix tables are supposed to work.

ImageIO's implementation may have suffered a similar bug (maybe 
https://bugs.openjdk.org/browse/JDK-7131823 ?), and that appears to have been 
backported.

I have dozens of additional test cases for this problem, but unfortunately I 
don't have the rights to commit them to the OpenJDK repo. Feel free to email me 
for additional context/test cases.

-------------

Commit messages:
 - 8351913: changing whitespace
 - Merge branch 'master' into JDK-8351913
 - Merge branch 'master' of https://github.com/mickleness/jdk
 - 8351913: code cleanup
 - 8351913: support decoding LZW image data with 4095 entries
 - Merge branch 'openjdk:master' into master
 - Merge branch 'openjdk:master' into master
 - Merge branch 'openjdk:master' into master
 - Merge pull request #5 from openjdk/master
 - Merge pull request #4 from openjdk/master
 - ... and 3 more: https://git.openjdk.org/jdk/compare/9fcb06f9...6179ea22

Changes: https://git.openjdk.org/jdk/pull/24271/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=24271&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8351913
  Stats: 249 lines in 4 files changed: 241 ins; 0 del; 8 mod
  Patch: https://git.openjdk.org/jdk/pull/24271.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/24271/head:pull/24271

PR: https://git.openjdk.org/jdk/pull/24271

Reply via email to