summaryrefslogtreecommitdiff
path: root/sys/src/cmd/jpg
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 /sys/src/cmd/jpg
parent31eb1b9d724ab8395d1191db083cabbb0d8b3bbe (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.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)