[gs-bugs] [Bug 689760] Missing characters: Failed to interpret TT
instructions
bugs.ghostscript.com-bugzilla-daemon at ghostscript.com
bugs.ghostscript.com-bugzilla-daemon at ghostscript.com
Thu Feb 12 07:28:59 PST 2009
http://bugs.ghostscript.com/show_bug.cgi?id=689760
ken.sharp at artifex.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |ASSIGNED
------- Additional Comments From ken.sharp at artifex.com 2009-02-12 07:28 -------
The font is actually incorrect. A number of the glyphs end up calling function 1
which is defined like this:
00060: FDEF
00061: MD[org]
00062: DUP
00063: PUSHB[1] 7
00065: SWAP
00066: JROT
00067: POP
00068: POP
00069: PUSHB[2] 0 21
00072: JMPR
00073: ABS
00074: DUP
00075: ROLL
00076: RCVT
00077: DUP
00078: ROLL
00079: SUB
00080: ABS
00081: PUSHB[1] 50
00083: LT
00084: IF
00085: SWAP
00086: EIF
00087: POP
00088: ROUND[Black]
00089: PUSHB[1] 64
00091: MAX
00092: ENDF
The problem is the relative jump:
00069: PUSHB[2] 0 21
00072: JMPR
This jumps forward 21 bytes, which is intended to end up at the ENDF instruction
(the pointer is still pointing at the JMPR for the purposes of counting the
bytes). However the programmer miscounted and there are only 20 bytes to the
ENDF instruction.
This is actually quite a common error in TrueType fonts, I suspect that some
interpreters spot the fact that they have run off the end of the function
definition and abort the function silently (silently ignoring errors seems to be
normal TT practice).
We don't seem to keep a count of the length of the individual functions, so I
propose to fix this the same way I fixed the last TrueType interpreter I worked
on, and check the next opcode and preceding opcode after executing a JMPR
instruction. If the opcode we are moving to is not an ENDF, but the opcode
immediately preceding it is, then apply one less byte to the instruction pointer.
The proposed fix works for this file, but I want to run a regression test before
checking in the change.
------- You are receiving this mail because: -------
You are the QA contact for the bug, or are watching the QA contact.
More information about the gs-bugs
mailing list