bug-m4
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Problem with --version after compiling autoconf


From: Eric Blake
Subject: Re: Problem with --version after compiling autoconf
Date: Wed, 30 May 2018 07:49:17 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0

On 05/30/2018 07:23 AM, Eric Blake wrote:

which in turn is expanding this macro before calling m4's eval with invalid input:

m4_bpatsubst(m4_bpatsubst(m4_translit([[[[0,$1]]]], [.-], [,,]),]dnl
m4_dquote(m4_dquote(m4_defn([m4_cr_Letters])))[[+],
               [+1,-1,[0r36:\&]]), [,0], [,[0r10:0]])

In fact, this used to work for single (but not multiple) letters; commit 6e1d6e2c (added in 2.63, Oct 2007) changed from a manual comparison of the three contiguous regions of a-z in EBCDIC into using m4's 0r36:NNN notation:

-[m4_translit(m4_bpatsubsts(m4_tolower([[$1]]),
-                      [\([0-9]+\)\([abcdefghi]\)],
-                        [m4_eval(\1 + 1).-1.\2],
-                      [\([0-9]+\)\([jklmnopqrs]\)],
-                        [m4_eval(\1 + 1).-1.1\2],
-                      [\([0-9]+\)\([tuvwxyz]\)],
-                        [m4_eval(\1 + 1).-1.2\2]),
-        [abcdefghijklmnopqrstuvwxyz],
-        [12345678901234567890123456])])
+[m4_map_sep([m4_eval], [.], _$0([$1]))])
+m4_define([_m4_version_unletter],
+[m4_translit(m4_bpatsubst([[[$1]]], ]dnl
+m4_dquote(m4_dquote(m4_defn([m4_cr_Letters])))[[+],
+                   [+1.-1.[0r36:\&]]),

So you've found a 10-year-old bug in autoconf, and an even older bug in m4. As least as far back as m4 commit bd11691d (Feb 2000, marked "Initial revision", which is when the current m4.git history starts), and the m4 1.4 release, m4's eval(0r36:NN) notation has been broken; more likely, all the way back to Nov 1993 when Francois Pinard introduced 0rNNN syntax into m4 1.1 (according to NEWS), although I cannot locate a tarball or version control of m4 that old.

It's worth patching m4 to not botch large-radix numbers on EBCDIC, but it's also possible to patch autoconf to quit relying on large-radix numbers; I'll probably end up patching both projects, when I get a chance.

--
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org



reply via email to

[Prev in Thread] Current Thread [Next in Thread]