[metapost] Uninitialized variable sometimes causing malformed TFM files

Marcel Krüger tex at 2krueger.de
Wed Mar 20 18:54:06 CET 2019

 ---- On Wed, 20 Mar 2019 18:29:09 +0100 luigi scarso <luigi.scarso at gmail.com> wrote ----
 > On Sat, Mar 16, 2019 at 6:04 PM Marcel Krüger <tex at 2krueger.de> wrote:
 > sorry for delay, I will it asap. -- 
 > luigi

Thanks. There is one other thing, I do not really know if I would describe it as a backward compatibility bug or a feature request:

For non-"scaled" numbersystems, code like

filldraw stroke z1e--z2e;
(example taken from cmbase.mf, `left_bracket`)

fail, because z1e-- is interpreted as z 1e- - instead of z1e --. So z1e--z2e is equal to z1-z2e, leading to lots of errors.

I understand that the new numbersystems and the exponential syntax can lead to problems of this kind, but I think this could be avoided:
Maybe a `e+` / `e-` could only be interpreted as exponential notation if it is followed by a  digit? I do not think
anyone would write "1e-" or "3e+" for 1 or 3, so it should not lead to any breakage.
On the other hand it would catch almost all cases where this is invoked accidentially.

A possible implementation of this change  is attached.

Best regards
Marcel Krüger

 > Hi,
 > the `indep_value` of `mp->zero_val` is never initialized, but it is used the index written into the
 > depth / ... fields in the TFM files for glyphs with zero depth/.... This causes malformed TFM files.
 > On my system the TFM corruption can be observed when using LuaTeX to build
 > \directlua{
 > local find_file
 > do
 >   local kpse = kpse.new('lualatex', 'mpost')
 >   find_file = function(name, mode, type)
 >     return mode == 'w' and name or kpse:find_file(name, type) or (type == 'mp' and kpse:find_file(name, 'mf'))
 >   end
 > end
 > local mp = mplib.new{
 >   job_name = 'cmr10',
 >   find_file = find_file,
 >   math_mode = 'scaled',
 > }
 > local result = mp:execute'input mfplain;mode:=localfont;input cmr10.mf;'
 > print(result.term)
 > }
 > \bye
 > Using standalone MetaPost I could not trigger this and the problem does not appear with the
 > LuaTeX binary from TeXLive binary from pretest, but custom built luatex versions from both the experimental
 > and the trunk branch showed the problem. The luatex binary available through the contextgarden seems to be affected too.
 > The problem can be fixed by adding
 > set_indep_value (mp->zero_val, 0);
 > below
 > @ @<Initialize table entries@>=
 > mp->zero_val = mp_get_value_node (mp);
 > set_value_number (mp->zero_val, zero_t);
 > in mp.w (Around line 33774)
 > Best regards
 > Marcel Krüger
-------------- next part --------------
A non-text attachment was scrubbed...
Name: MP-digit-change.diff
Type: application/octet-stream
Size: 2129 bytes
Desc: not available
URL: <https://tug.org/pipermail/metapost/attachments/20190320/9fad7281/attachment.obj>

More information about the metapost mailing list