Path: csiph.com!goblin1!goblin.stu.neva.ru!usenet.stanford.edu!not-for-mail From: Eric Blake Newsgroups: gnu.bash.bug Subject: Re: [PATCH] Define $as_echo and $as_echo_n for backward compatibility. Date: Fri, 13 Mar 2020 14:32:23 -0500 Organization: Red Hat, Inc. Lines: 68 Approved: bug-bash@gnu.org Message-ID: References: <20200313185728.19748-1-zackw@panix.com> <9657db28-a4b0-4fcb-1d37-0cbdad001d9d@redhat.com> <15f53208-b1e0-265d-bb59-17422c993d02@redhat.com> NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: usenet.stanford.edu 1584127963 27081 209.51.188.17 (13 Mar 2020 19:32:43 GMT) X-Complaints-To: action@cs.stanford.edu Cc: autoconf-patches@gnu.org, bug-bash To: Zack Weinberg Envelope-to: bug-bash@gnu.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1584127953; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fpIlEBrAO3x3IWT2RFBOOf0SfbRLzTUE2FqgmMS5jSA=; b=ireSCwLPRD8sISpnKbWDZ4lg7J1Uv0D5BDQwBAW5x4ivkEesU4s6tN/foqHUvJMK3oaGTE iLukVNnnEdXyydHWe6jyGxQ0gJtloRFo7Z0M++h21N9rn9fuJ29leYjYUhK7IMQj2duVrh b2O8YI+orKqfV+2nqS6Eg1ge3SxYTO8= X-MC-Unique: PSeSEqdOMCW8rbylXPi0Wg-1 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 In-Reply-To: Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 207.211.31.81 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <15f53208-b1e0-265d-bb59-17422c993d02@redhat.com> X-Mailman-Original-References: <20200313185728.19748-1-zackw@panix.com> <9657db28-a4b0-4fcb-1d37-0cbdad001d9d@redhat.com> Xref: csiph.com gnu.bash.bug:16030 On 3/13/20 2:22 PM, Zack Weinberg wrote: > On Fri, Mar 13, 2020 at 3:13 PM Eric Blake wrote: >> >> Unpatched bash 5.0 has a bug where calling $as_echo that contains \ can >> result in unintended globbing, where the behavior of the expansion is >> dependent on the contents of the current directory. Nasty! > > Yikes! And not just unpatched 5.0.0, either... > > $ bash --version > GNU bash, version 5.0.16(1)-release (x86_64-pc-linux-gnu) > $ touch %sn; bash -c 'cmd='\''printf %s\n'\''; $cmd test' > testn$ > > I don't see any practical workaround and I surely hope this gets fixed > *properly* soon in bash (that discussion you linked to doesn't seem > terribly promising, though). You can always make $as_echo expand to the name of a shell function rather than to something that directly contains \, but then we have to worry about making sure the function is defined before anyone that uses $as_echo... I'm wondering if Chet has an update on the matter (adding bug-bash). Repeating some context: https://www.mail-archive.com/austin-group-l@opengroup.org/msg04237.html was a mail to the POSIX folks last June complaining about how bash 5.0's change to allow \ to trigger globbing has unintended consequences, and breaks many existing configure scripts based on the contents of the current directory. I know the Austin Group finally settled on wording that does indeed explicitly state that unpatched bash 5.0 is buggy: https://www.austingroupbugs.net/view.php?id=1234#c4564 " On page 3749 line 128725 section C.2.13.3, add a new paragraph: Patterns are matched against existing filenames and pathnames only when the pattern contains a '*', '?' or '[' character that will be treated as special. This prevents accidental removal of backslash characters in variable expansions where generating a list of matching files is not intended and a (usually oddly named) file with a matching name happens to exist. For example, a shell script that tries to be portable to systems that predate the introduction of functions and printf might use this on POSIX systems: myecho='printf %s\n' to be used as: $myecho args... If %s\n were to be matched against existing files, this would not work if a file called %sn happened to exist. " but I don't know where things stand in bash proper to incorporate the result of that discussion (is it something fixed in unreleased batch, and we are just missing a formal patch to the 5.0 series, or is it still unwritten, or...?). -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3226 Virtualization: qemu.org | libvirt.org