Explicitly bless in the documentation, and fix in the man backend,
[sgt/halibut] / bk_paper.c
index b38060f..eb3caf0 100644 (file)
@@ -1318,7 +1318,9 @@ static int string_width(font_data *font, wchar_t const *string, int *errs)
     for (; *string; string++) {
        int index;
 
-       index = font->bmp[(unsigned short)*string];
+       index = (*string < 0 || *string > 0xFFFF ? 0xFFFF :
+                font->bmp[*string]);
+
        if (index == 0xFFFF) {
            if (errs)
                *errs = 1;
@@ -1691,9 +1693,11 @@ static page_data *page_breaks(line_data *first, line_data *last,
            text += l->line_height;
 
            l->page = page;
-           l->ypos = text + space + head +
-               space * (float)page->first_line->vshortfall[n] /
-               page->first_line->space[n];
+           l->ypos = text + space + head;
+           if (page->first_line->space[n]) {
+               l->ypos += space * (float)page->first_line->vshortfall[n] /
+                   page->first_line->space[n];
+           }
 
            if (l == page->last_line)
                break;
@@ -1764,7 +1768,8 @@ static int render_string(page_data *page, font_data *font, int fontsize,
     textpos = textwid = 0;
 
     while (*str) {
-       glyph = font->bmp[*str];
+       glyph = (*str < 0 || *str > 0xFFFF ? 0xFFFF :
+                font->bmp[*str]);
 
        if (glyph == 0xFFFF) {
            str++;