The GNU M4 Team is pleased to announce the release of GNU M4 1.4.8.
GNU `m4' is an implementation of the traditional Unix macro processor.
It is mostly SVR4 compatible, although it has some extensions (for
example, handling more than 9 positional parameters to macros). `m4'
also has built-in functions for including files, running shell
commands, doing arithmetic, etc. Autoconf needs GNU `m4' for
generating `configure' scripts, but not for running them.
This release fixes a memory allocation overflow bug that could
potentially be exploited for arbitrary code execution on 32-bit
platforms. It has several command line improvements, and adds a new
macro `mkstemp'. It also improves error reporting of multi-line macro
invocations to track the line where the macro name appears.
The changes in this version trigger spurious testsuite failures in the
Autoconf 2.60 testsuite; if you use GNU Autoconf, it is suggested that
you upgrade to Autoconf 2.61 after upgrading to M4 1.4.8.
New in 1.4.8: 20 Nov 2006
* The `divert' macro and `-H'/`--hashsize' command line option no longer
cause a core dump when handed extra large values. Also, `divert' now
uses memory proportional to the number of diversions in use, rather than
to the maximum diversion number encountered, so that large diversion
numbers are less likely to exhaust system memory; and is no longer
limited by the maximum number of file descriptors.
* The `--help' and `--version' command line options now consistently
override all earlier options. For example, `m4 --debugfile=trace
--help' now no longer accidentally creates an empty file `trace'.
* The `-L'/`--nesting-limit' command line option can now be set to 0
to remove the default limit of 1024. However, it is still possible that
heavily nested input can cause abrupt program termination due to stack
* Problems encountered when writing to standard error, such as with the
`errprint' macro, now always cause a non-zero exit status.
* Warnings and errors issued during macro expansion are now consistently
reported at the line where the macro name was detected, rather than
where the close parenthesis resides. Text wrapped by `m4wrap' now
remembers the location that was in effect when m4wrap was invoked,
rather than changing to line 0 and the empty string for a file. The
macros `__line__' and `__file__' now work correctly even as the last
token in an included file.
* The `builtin' and `indir' macros now transparently handle builtin
tokens generated by `defn'.
* When diversions created by the `divert' macro collect enough text that
M4 must use temporary files, the environment variable $TMPDIR is now
consulted, and a better effort is made to clean up those files in the
event of a fatal signal.
* The `mkstemp' builtin is added with the same GNU semantics as `maketemp',
based on the recommendation of POSIX to deprecate the POSIX semantics of
`maketemp' as inherently insecure. In GNU mode (no -G supplied on the
command line), `maketemp' silently retains the secure GNU semantics, but
a future release of M4 will change this to emit a warning. In
traditional mode (m4 -G), `maketemp' now uses the POSIX-mandated insecure
semantics, and issues a warning that you should convert your script to
use `mkstemp' instead. Additionally, `mkstemp' and `maketemp' are now
well-defined even if the template argument does not end in six `X'
* The manual has been improved, including a new section on a composite
* The `changecom' and `changequote' macros now treat an empty second
argument the same as if it were missing, rather than using the empty
string and making it impossible to end a comment or quote.
* The `translit' macro now operates in linear instead of quadratic time,
and is now eight-bit clean.
* The `-D', `-U', `-s', and `-t' command line options now take effect
after any files encountered earlier on the command line, rather than up
front, as is done in traditional implementations and required by POSIX.
m4-1.4.8 is available now from ftp.gnu.org, along with diffs and
xdeltas against m4-1.4.7 that are also available from ftp.gnu.org.
Please use a mirror to reduce stress on the main gnu machine:
You will then need to have recent release versions of Automake (at
least 1.9.x) and Autoconf (at least 2.60) installed to bootstrap the
checked out sources yourself.
Please report bugs to <bug-m4@gnu....>, along with the output of 'make
check' and any other information that might be useful in resolving the
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Cygwin)
Comment: Public key at home.comcast.net/~ericblake/eblake.gpg
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org