[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