From e60eae758d032bbe03cfea615ef71bc066b416af Mon Sep 17 00:00:00 2001 From: Devon Govett Date: Tue, 23 Aug 2011 12:49:45 -0400 Subject: [PATCH] Fix a JPEG parsing issue with Progressive DCT --- lib/image/jpeg.coffee | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/image/jpeg.coffee b/lib/image/jpeg.coffee index 7cfbc1f..a21933c 100644 --- a/lib/image/jpeg.coffee +++ b/lib/image/jpeg.coffee @@ -9,14 +9,21 @@ class JPEG constructor: (@data) -> len = data.length - data.pos = 2 # Skip the first two bytes of JPEG identifier. + + if data.readUInt16() isnt 0xFFD8 + throw "SOI not found in JPEG" + + markers = [0xFFC0, 0xFFC1, 0xFFC2, 0xFFC3, 0xFFC4, 0xFFC5, 0xFFC6, 0xFFC7, + 0xFFC8, 0xFFC9, 0xFFCA, 0xFFCB, 0xFFCC, 0xFFCD, 0xFFCE, 0xFFCF] while data.pos < len marker = data.readUInt16() - break if marker is 0xFFC0 + break if marker in markers data.pos += data.readUInt16() - data.pos += 2 + throw "Invalid JPEG." unless marker in markers + data.pos += 2 + @bits = data.readByte() @height = data.readShort() @width = data.readShort()