From 51b22d8548e61d3807b8b94e09d84f116ca0eb1c Mon Sep 17 00:00:00 2001 From: Alex Musolino Date: Sat, 31 Oct 2020 15:44:49 +1030 Subject: [PATCH] jpg: treat EOF as EOI marker Some jpegs, rightly or wrongly, do not contain an EOI marker. This causes jpg(1) to bail out even after correctly parsing the entire image. --- sys/src/cmd/jpg/readjpg.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sys/src/cmd/jpg/readjpg.c b/sys/src/cmd/jpg/readjpg.c index 942b581e9..0d50802e3 100644 --- a/sys/src/cmd/jpg/readjpg.c +++ b/sys/src/cmd/jpg/readjpg.c @@ -389,8 +389,12 @@ readbyte(Header *h) if(h->peek >= 0){ x = h->peek; h->peek = -1; - }else if(Bread(h->fd, &x, 1) != 1) - jpgerror(h, readerr); + }else + switch(Bread(h->fd, &x, 1)){ + case 0: return -1; + case 1: break; + default: jpgerror(h, readerr); + } return x; } @@ -403,6 +407,8 @@ marker(Header *h) Again: while((c=readbyte(h)) == 0) ; + if(c < 0) + return EOI; if(c != 0xFF) goto Again; while(c == 0xFF)