Reporting a bug on behalf of mirabilos: On Thu, Feb 17, 2022 at 11:46:52PM +0000, Austin Group Bug Tracker via austin-group-l at The Open Group wrote: > https://www.austingroupbugs.net/view.php?id=1558 ... > Summary: require [^...] in addition to [!...] for bracket > expression negation > ====================================================================== > > ---------------------------------------------------------------------- > (0005677) mirabilos (reporter) - 2022-02-17 23:46 > https://www.austingroupbugs.net/view.php?id=1558#c5677 > ---------------------------------------------------------------------- > It gets worse. > > Expecting my objection here to be ignored, I’ve added debugging code to > mksh (and, indeed, adding the caret needs changes in more than one > codepath, and it’s very much something I’d like to not need to do > because more checks make the code slower), and it triggers a warning on: > > […] > # Sed expression to map a string onto a valid CPP name. > as_tr_cpp="eval sed > 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" > […] > echo moo | $as_tr_cpp > > This is what GNU autoconf does by default. > > W: configure[557]: unescaped [^...] in shellglob; this may change the > meaning in the future! > > So, well, why? Because the variable contains… > > typeset as_tr_cpp='eval sed > '\''y%*abcdefghijklmnopqrstuvwxyz%PABCDEFGHIJKLMNOPQRSTUVWXYZ%;s%[^_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789]%_%g'\' > > (via “typeset -p”), and without -o noglob, using it as simply > $as_tr_cpp does, in fact, glob on it. > > Yes, clearly a bug in GNU autoconf… which I’m not personally going to > even try and report. The …[^… is passed to sed. But it is also > processed by the shell first, by accident. (This is from > OpenSSH-portable’s configure.)
So we need to patch autoconf to properly shell-quote the sed script stored in as_tr_cpp. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org