summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Musolino <alex@musolino.id.au>2020-10-31 15:44:49 +1030
committerAlex Musolino <alex@musolino.id.au>2020-10-31 15:44:49 +1030
commit51b22d8548e61d3807b8b94e09d84f116ca0eb1c (patch)
tree2dfe76da298d0b9c9742686edcaf6553d8bca3e1
parent31eb1b9d724ab8395d1191db083cabbb0d8b3bbe (diff)
downloadplan9front-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.c10
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)