diff options
author | Alex Musolino <alex@musolino.id.au> | 2020-10-31 15:44:49 +1030 |
---|---|---|
committer | Alex Musolino <alex@musolino.id.au> | 2020-10-31 15:44:49 +1030 |
commit | 51b22d8548e61d3807b8b94e09d84f116ca0eb1c (patch) | |
tree | 2dfe76da298d0b9c9742686edcaf6553d8bca3e1 /sys/src/cmd/jpg | |
parent | 31eb1b9d724ab8395d1191db083cabbb0d8b3bbe (diff) |
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.
Diffstat (limited to 'sys/src/cmd/jpg')
-rw-r--r-- | sys/src/cmd/jpg/readjpg.c | 10 |
1 files 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) |