need to account for png filter algorithm byte. also, since the buffer is not cleared on read, we need to insure a full read of the header. Reference: /n/sources/patch/applied/png-fencepost Date: Tue Dec 25 14:39:07 CET 2012 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/jpg/readpng.c Tue Dec 25 14:37:03 2012 +++ /sys/src/cmd/jpg/readpng.c Tue Dec 25 14:37:02 2012 @@ -389,8 +389,8 @@ ZlibW zw; buf = pngmalloc(IDATSIZE, 0); - Bread(b, buf, sizeof PNGmagic); - if(memcmp(PNGmagic, buf, sizeof PNGmagic) != 0) + if(Bread(b, buf, sizeof PNGmagic) != sizeof PNGmagic + || memcmp(PNGmagic, buf, sizeof PNGmagic) != 0) sysfatal("bad PNGmagic"); n = getchunk(b, type, buf, IDATSIZE); --- /sys/src/cmd/jpg/writepng.c Tue Dec 25 14:37:06 2012 +++ /sys/src/cmd/jpg/writepng.c Tue Dec 25 14:37:04 2012 @@ -79,7 +79,7 @@ pixwid = z->pixwid; b = buf; e = b+n; - while(b+pixwid <= e){ + while(b+pixwid < e){ /* one less for filter alg byte */ if(z->y >= z->dy) break; if(z->x == 0)