X-Git-Url: http://git.draconx.ca/gitweb/liblbx.git/blobdiff_plain/4a84fce79ab5326aae7aa9f99ccb38b5063b714a..ea9655907d37782a2a505caee22f2458058784ee:/src/image.c diff --git a/src/image.c b/src/image.c index 9b9b1dd..81f66e0 100644 --- a/src/image.c +++ b/src/image.c @@ -51,8 +51,8 @@ struct lbx_image *lbximg_fopen(FILE *f) * If we never find any exceptions, we can replace the assertions with * assumptions. */ - assert(tmp.wtf1 == 0); - assert(tmp.offs == tmp.frames + 1); + _lbx_assert(tmp.wtf1 == 0); + _lbx_assert(tmp.offs == tmp.frames + 1); new = malloc(sizeof *new + tmp.offs * sizeof *new->offsets); if (!new) { @@ -110,8 +110,7 @@ static int _lbx_drawrow(int first, struct lbx_image *img) xval = letohs(xval); img->foff += sizeof xval; /* Ensure that the row fits in the image. */ - if (img->height - img->currenty <= yval - || xval >= img->width || count > img->width - xval) { + if (img->height - img->currenty <= yval || xval >= img->width) { lbx_errno = LBX_EFORMAT; return -1; } @@ -119,17 +118,22 @@ static int _lbx_drawrow(int first, struct lbx_image *img) img->currenty += yval; img->currentx = xval; } else { - if (fread(&yval, sizeof yval, 1, img->f) != 1) goto readerr; - yval = letohs(yval); img->foff += sizeof yval; - - /* FIXME Still have to figure out what to do here. */ - - count = type; + if (fread(&xval, sizeof xval, 1, img->f) != 1) goto readerr; + xval = letohs(xval); img->foff += sizeof xval; - if (count > img->width - img->currentx) { + if (img->width - img->currentx <= xval) { lbx_errno = LBX_EFORMAT; return -1; } + img->currentx += xval; + + count = type; + + } + + if (count > img->width - img->currentx) { + lbx_errno = LBX_EFORMAT; + return -1; } pos = &img->framedata[img->currenty][img->currentx];