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 | |
parent | 31eb1b9d724ab8395d1191db083cabbb0d8b3bbe (diff) | |
download | plan9front-51b22d8548e61d3807b8b94e09d84f116ca0eb1c.tar.xz |
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.
-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) |