
I dug around in the code, and the actual overlay is performed in zm_image.cpp's Image::Annotate function, which basically involves a lookup to zm_font.h to translate each character into a bitmap using a char array. zm_font.h actually has correct bitmaps for all 255 possible values, and since the transition from valid char to garbage data occurs precisely at 128 I assume there's some sort of signed/unsigned issue at work, but I've been over the code at least a dozen times and just can't seem to find where the issue is.