X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/halibut/blobdiff_plain/f322d7ecd15b75bb666922d9c4b09b8d75d74eef..c437c4c4d294b54c99a58f3130c82013a1bf7024:/in_sfnt.c diff --git a/in_sfnt.c b/in_sfnt.c index 73479b1..0d2c7d5 100644 --- a/in_sfnt.c +++ b/in_sfnt.c @@ -885,19 +885,28 @@ void sfnt_getmap(font_info *fi) { for (k = startCode[j]; k <= endCode[j]; k++) { idx = (k + idDelta[j]) & 0xffff; if (idx != 0) { - if (idx > sf->nglyphs) goto bad; + if (idx > sf->nglyphs) { + error(err_sfntbadglyph, &sf->pos, k); + continue; + } fi->bmp[k] = sfnt_indextoglyph(sf, idx); } } } else { unsigned startidx = idRangeOffset[j]/2 - segcount + j; for (k = startCode[j]; k <= endCode[j]; k++) { - if (startidx + k - startCode[j] >= nglyphindex) - goto bad; + if (startidx + k - startCode[j] >= + nglyphindex) { + error(err_sfntbadglyph, &sf->pos, k); + continue; + } idx = glyphIndexArray[startidx + k - startCode[j]]; if (idx != 0) { idx = (idx + idDelta[j]) & 0xffff; - if (idx > sf->nglyphs) goto bad; + if (idx > sf->nglyphs) { + error(err_sfntbadglyph, &sf->pos, k); + continue; + } fi->bmp[k] = sfnt_indextoglyph(sf, idx); } }