Discard first byte if not 0xFF (for issue #630)

This commit is contained in:
hugovk 2014-05-05 22:09:57 +03:00
parent 73eafbb55f
commit e835dd70a1

View File

@ -290,24 +290,29 @@ class JpegImageFile(ImageFile.ImageFile):
while True: while True:
s = s + self.fp.read(1) i = i8(s)
if i == 0xFF:
i = i16(s) s = s + self.fp.read(1)
i = i16(s)
else:
# Skip non-0xFF junk
s = "\xff"
continue
if i in MARKER: if i in MARKER:
name, description, handler = MARKER[i] name, description, handler = MARKER[i]
# print hex(i), name, description # print hex(i), name, description
if handler is not None: if handler is not None:
handler(self, i) handler(self, i)
if i == 0xFFDA: # start of scan if i == 0xFFDA: # start of scan
rawmode = self.mode rawmode = self.mode
if self.mode == "CMYK": if self.mode == "CMYK":
rawmode = "CMYK;I" # assume adobe conventions rawmode = "CMYK;I" # assume adobe conventions
self.tile = [("jpeg", (0,0) + self.size, 0, (rawmode, ""))] self.tile = [("jpeg", (0, 0) + self.size, 0, (rawmode, ""))]
# self.__offset = self.fp.tell() # self.__offset = self.fp.tell()
break break
s = self.fp.read(1) s = self.fp.read(1)
elif i == 0 or i == 65535: elif i == 0 or i == 0xFFFF:
# padded marker or junk; move on # padded marker or junk; move on
s = "\xff" s = "\xff"
else: else: