From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 9083 invoked from network); 3 Apr 2021 02:50:18 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 3 Apr 2021 02:50:18 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1617418218; b=0w3skJX88JlHgPFyjNpHBbV4Wfl26uLbOE8yMd9qmvT7RyYs39ekaqKDcx2M7at3pjiuSn7isZ 8Zma/0xQuKHrwmsw7xybcthVDbWBeD7bPqMCBY9pQ/IaNka+40FIzx+sdLfLEY8f30YD1UGngR diwhVI0YNLe4uJqih7NJF7XIygud0zQSgVBGmVwe6OqkwXr+Bi6L8a6J3wRrsCUnFLdJblJ6Pt 2ScF0fqx3qhYaxVsRcavinH/3wLyHugr886ED/9SOA1/aIe5PdzU80fP34UBg2vP6lZuT877cD y7s5DUyaSjhyRqcDVodgWLzj8yLljhbtyxYI+hog/KBiJA==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (out4-smtp.messagingengine.com) smtp.remote-ip=66.111.4.28; dkim=pass header.d=daniel.shahaf.name header.s=fm3 header.a=rsa-sha256; dkim=pass header.d=messagingengine.com header.s=fm2 header.a=rsa-sha256; dmarc=none header.from=daniel.shahaf.name; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1617418218; bh=s3eeukrg8ElS8lg/3SF2CRyRPrewAZShosMTQ6GaLJU=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Transfer-Encoding:Content-Type:MIME-Version: Message-ID:Date:Subject:To:From:DKIM-Signature:DKIM-Signature: DKIM-Signature; b=FJBxZI41dlFYSbv58SwvXRwlEDpyleNYjXTW8ribv5CUIESAQvr7XluJ4qaOq5MHX6J/trejgo lf2dz0gqI9ww6QggNfgmmft9Rxkq+uOCJ6bj4XhKEy75zBPaThBQEFk9pdReLA+C3W3jSidKW9 QrCnjvh4LS0RFKYraX12/QlHGzJ6i6URx1g4xk2GWo0eRPA4JJ1+FYHvUAZVh9QnmWEl2GJpYC 9vOkacXjSJhgZ/tFHBEMriQFJBKHYcnXsjzhYSU8bxQx3TMC7iGwoVuVpJDGETAAbmGH61iBMk NF4ksHaA4hVGQQxAgm0SQ1/wANo3BxHCNvsMQkqNfSRD7g==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Transfer-Encoding: Content-Type:MIME-Version:Message-Id:Date:Subject:To:From:Reply-To:Cc: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References; bh=zYgbr3wBL+mZxakqeIDyHYBMc/36CwY0sBs+VFEXsgc=; b=r840fwkzfPv9CclJHBak2C6JvM 2z8C9V2ffz58RSM4V53SY1VPxOGndl92xCdK8kErbZnmMnqGD01ZSLtZzR4AQxPx/Ui0kqCl2fZfl nvsiJmhftiDv5iIH3pLnRobHZ/wEcdYnOXZKuC3dz3+RsoUHtXPpFrPnPvaJpDGk7Nv8Yjw6vheaH T4MFD6SSwGMMKWRmFbkaBhl5NWQoQinYG6HbQQKKr8//GQfktSMwbLJhgmcvvCm7XBGKpcKWigJUR xrcWTk819dCsmsulQhKSOGsDfYdjfB39Y6tSasQCXQKSGTWM0K2lWRI6A+m0aYM7fBVtusLFAMp1T SukBBoAA==; Received: from authenticated user by zero.zsh.org with local id 1lSWMc-000MQQ-AG; Sat, 03 Apr 2021 02:50:18 +0000 Authentication-Results: zsh.org; iprev=pass (out4-smtp.messagingengine.com) smtp.remote-ip=66.111.4.28; dkim=pass header.d=daniel.shahaf.name header.s=fm3 header.a=rsa-sha256; dkim=pass header.d=messagingengine.com header.s=fm2 header.a=rsa-sha256; dmarc=none header.from=daniel.shahaf.name; arc=none Received: from out4-smtp.messagingengine.com ([66.111.4.28]:53183) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_256_GCM_SHA384:256) id 1lSWMP-000MHi-7Q; Sat, 03 Apr 2021 02:50:06 +0000 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id 7432C5C0108; Fri, 2 Apr 2021 22:50:04 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Fri, 02 Apr 2021 22:50:04 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= daniel.shahaf.name; h=from:to:subject:date:message-id :mime-version:content-type:content-transfer-encoding; s=fm3; bh= zYgbr3wBL+mZxakqeIDyHYBMc/36CwY0sBs+VFEXsgc=; b=JiXCwL4rJWhOuI47 +5utB039vVBubwNIx6Ev4q7hg5wKD1d1t+6pi5fgHCdKsFR8/fetsy/iPp4887eP v/tWIuCInoE7XnZkKYGnQmr3FfSodu8qDhl8Ez15lntFlYyx2E/dBuDwxQ26sNs+ NiesRmWpw+CblmatdosGRHZw/ajVWRWzqim0OubstEkJZsnBs3gvRVZfW28wO/oC Uzh2px0y9WIVmZX3TXcUbKJ1sP2dMI+aXejC4IIhzv8uWpPvXT/WI40UaqGaQBBB SPsmCkppQKBhkqQPt9f/lz2/lCsvw/x4fHdRbY+k8imbKHhXTdQdgGEr8M9lV9+C ghSJPg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=zYgbr3 wBL+mZxakqeIDyHYBMc/36CwY0sBs+VFEXsgc=; b=XeaPf/8PksV8uiSRdBNVfw gnf6EYJyUZp8KA4NG1oFWA9M3SydgLRDDNmBjGe7Fyz9E6VN17D4nKtBpMxVM3/B /e2rYh/DFik1TNSSKih2edHvqKQ3khgh625jqvOcuhRcz5MYnuQ7Ebthup0a6T/M +56SwljtAp1d89t+lRtaS1bXCioh/cqrQmo+iKI8cSNKi1yOHUbJCH6zNON6a1ZC yh/HAcBArtLM6mvx3JMCAICIL6t5MwZkguSzHrBIWzfY2fEQ91wGNIp6h7UNNBBa 1FeLXtp14YK7ZBImHPt8Bt1Hsy5YK/xXg0RIOm8zNTa08maOjwDnkE07vsSo7CKA == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudeijedgiedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucgogfeguddtqddvjeculdegtddmnecujfgurhephf fvufffkffogggtgfesthektddtredtjeenucfhrhhomhepffgrnhhivghlucfuhhgrhhgr fhcuoegurdhssegurghnihgvlhdrshhhrghhrghfrdhnrghmvgeqnecuggftrfgrthhtvg hrnhepleefffetfeehvddukeegueevueeihfetiefhhfeitefgudegjefgjeevfedvhefg necuffhomhgrihhnpegruhhsthhinhhgrhhouhhpsghughhsrdhnvghtnecukfhppeejle drudekvddrfeeirddukedunecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehm rghilhhfrhhomhepugdrshesuggrnhhivghlrdhshhgrhhgrfhdrnhgrmhgv X-ME-Proxy: Received: from tarpaulin.shahaf.local2 (bzq-79-182-36-181.red.bezeqint.net [79.182.36.181]) by mail.messagingengine.com (Postfix) with ESMTPA id DA0EE24005A for ; Fri, 2 Apr 2021 22:50:03 -0400 (EDT) Received: by tarpaulin.shahaf.local2 (Postfix, from userid 1000) id 4FC1cB3ztgz2HV; Sat, 3 Apr 2021 02:50:02 +0000 (UTC) From: Daniel Shahaf To: zsh-workers@zsh.org Subject: [PATCH] Make the parameter expansion subscript flags parse error message, "error in flags", identify the location of the parse error. Date: Sat, 3 Apr 2021 02:49:54 +0000 Message-Id: <20210403024954.4321-1-danielsh@tarpaulin.shahaf.local2> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Seq: 48379 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: --- Review of the logic obtaining and massaging str_copy_for_output would be appreciated. It's a 2500-line function and there are multiple char* variables that refer to the same memory locations as *str, so it's conceivable I overlooked something. If it's too brittle, an alternative is to simply output «s» untokenized. In the test case, that would output «x+):-}». The offset is computed 1-based even when KSH_ARRAYS is set. I don't think interpretation of an error message should depend on the option settings current at the time of the error message. Cheers, Daniel Src/subst.c | 28 +++++++++++++++++++++++++--- Test/D04parameter.ztst | 5 +++++ 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/Src/subst.c b/Src/subst.c index 8f5bd355e..96e0914eb 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -2259,9 +2259,31 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags, break; default: - flagerr: - zerr("error in flags"); - return NULL; + flagerr: + { + /* + * We're trying to output the string that failed to + * parse and the offset of the parse error within that. + * + * The string is *str. It hasn't been changed since + * entry to this function, I think, except that the + * first non-variable-declaration line in this function + * (currently the 238th line in this function) + * writes a NUL to the first place in *str, so we'll + * compensate by outputting the dollar sign manually. + */ + char *str_copy_for_output = dupstring(*str + 1); + + /* + * Convert to a 1-based offset, because the shell + * language is 1-based by default. + */ + zlong offset = s - *str + 1; + + untokenize(str_copy_for_output); + zerr("error in flags near position %z in '$%s'", offset, str_copy_for_output); + return NULL; + } } } s++; diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst index ac99ff0e3..05bb61bdc 100644 --- a/Test/D04parameter.ztst +++ b/Test/D04parameter.ztst @@ -2691,3 +2691,8 @@ F:behavior, see http://austingroupbugs.net/view.php?id=888 eval 'echo $(\*)' 0:Backslash character other than newline is normal after $( >What a star + + : ${(zZ+x+):-} +1:parameter expansion flags parsing error gives a clue +?(eval):1: error in flags near position 7 in '${(zZ+x+):-}' +