Date: Sat, 4 Oct 2003 01:37:16 +0100 (BST) From: Mark Valentine <mark@thuvia.org> To: FreeBSD-gnats-submit@FreeBSD.org Subject: bin/57554: sh(1) incorrect handling of quoted parameter expansion Message-ID: <200310040037.h940bGPL077984@dotar.thuvia.org> Resent-Message-ID: <200310040040.h940eEnq066107@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 57554 >Category: bin >Synopsis: sh(1) incorrect handling of quoted parameter expansion >Confidential: no >Severity: serious >Priority: medium >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Oct 03 17:40:14 PDT 2003 >Closed-Date: >Last-Modified: >Originator: Mark Valentine >Release: FreeBSD 4.8-STABLE i386 >Organization: >Environment: System: FreeBSD dotar.thuvia.org 4.8-STABLE FreeBSD 4.8-STABLE #6: Wed Jun 11 15:04:41 BST 2003 root@dotar.thuvia.org:/usr/obj/usr/src/sys/DOTAR i386 >Description: sh(1) incorrectly quotes the pattern word in parameter expansions involving prefix/suffix removal when the whole expansion is enclosed in double quotes: $ foo='\{foo' $ echo ${foo#\{} \{foo # correct (1) - pattern is { $ echo ${foo#"\{"} foo # correct (2) - pattern is \{ $ echo "${foo#\{}" foo # WRONG - should be same as (1) IEEE Std 1003.1-2001 states that "Enclosing the full parameter expansion string in double-quotes shall not cause the [...] pattern characters to be quoted, whereas quoting characters within the braces shall have this effect." NOTE: there seems to be a related problem with our handling of ${foo#{} - bash and ksh seem to expect a further matching } - but I haven't managed to figure out chapter and verse on that one! I initially came across this bug in the context of (foo='{foo' and "${foo#\{}" doing the wrong thing (real life scenario: FreeBSD- hosted NetBSD build falls over in distrib/utils/sysinst/msg_xlat.sh), but the above example is a clearer illustration of the part I did manage to find chapter and verse on... >How-To-Repeat: >Fix: NetBSD's sh(1) handles this correctly, if the code change can be identified... (NOTE: possibly look at their parser.c rev 1.51 and 1.52; my brain's shut down for the day.) >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200310040037.h940bGPL077984>