The patch looks good except for three things:
1. One of the comment blocks in parse_fonts_tbl() says this:
// is the index sane?
// realistically, it has to be less than UCHAR_MAX to fit all the special chars, but not sure how many there are for all fonts & langs
// e.g. English font03.vf has 72 special chars?
It sounds like you might be confusing accented letters for special characters. Every font that has special characters has exactly 7, and they're always contiguous and in the same order. (No, font03.vf most certainly does not have 72 special characters, nor does it have that many non-ASCII characters.)
2. For the check below that, the second half of the condition should be special_char_index > UCHAR_MAX - 6.
3. Shouldn't there be a way to specify a special character index for all languages?