Bug in utoi(), which made it ignore a leading minus sign when
[sgt/halibut] / in_sfnt.c
index 73479b1..0d2c7d5 100644 (file)
--- 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);
                            }
                        }