Skip to content

Commit 31c54e3

Browse files
authored
Merge pull request #570 from treeform/fix/gif-bgcolor-index-bounds
Fix GIF background color index bounds
2 parents 087eed4 + 11ea831 commit 31c54e3

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

src/pixie/fileformats/gif.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ proc decodeGif*(data: string): Gif {.raises: [PixieError].} =
4141
bgColorIndex = data.readUint8(11).int
4242
pixelAspectRatio = data.readUint8(12)
4343

44-
if bgColorIndex > globalColorTableSize:
44+
if bgColorIndex >= globalColorTableSize:
4545
failInvalid()
4646

4747
if pixelAspectRatio != 0:

tests/test_gif.nim

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,20 @@ block:
3535
decodeGif(readFile("tests/fileformats/gif/newtons_cradle.gif"))
3636
doAssert animatedGif.frames.len == 36
3737
doAssert animatedGif.intervals.len == animatedGif.frames.len
38+
39+
block:
40+
proc addLe16(data: var string, value: int) =
41+
data.add(char(value and 0xff))
42+
data.add(char((value shr 8) and 0xff))
43+
44+
var payload = "GIF89a"
45+
payload.addLe16(1)
46+
payload.addLe16(1)
47+
payload.add(char(0x80)) # Global color table present, size = 2 entries.
48+
payload.add(char(0x02)) # One past the last valid color table index.
49+
payload.add(char(0x00))
50+
payload.add("\x00\x00\x00\xff\xff\xff")
51+
payload.add(char(0x3b))
52+
53+
doAssertRaises PixieError:
54+
discard decodeGif(payload)

0 commit comments

Comments
 (0)