From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=3.4.4 Received: from zero.zsh.org (zero.zsh.org [IPv6:2a02:898:31:0:48:4558:7a:7368]) by inbox.vuxu.org (Postfix) with ESMTP id 7B6A6228FC for ; Sat, 6 Apr 2024 00:36:40 +0200 (CEST) ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1712356600; b=CeLU8r6tnvFkCQcMcFCPu73Jrz6zWTRNuBET0RG0dO+r88OkjbR206p2k5FXoICtmCG4MxfXH4 y04SmywfCOr/CAVlLnmlVw5OGm+EUrSpbQxS+3ipyJQcK0ggZuo1IehIHQ25Ug1X9k2GGIwZ8X JGqIv5/zyObL078FIm6U1DFDB6PmzeEkS3D9UZM5Nye3qWZ5/wX2ieEiOO1/ckDIEDCnozo+h4 i2h+gdouUwfZYI7v02jN0yKebiFDieFIu1BmxBaPBNMnwyXiK+39X9sYc/3AbUqwQ/eYYasM5A nhhbe0nqRsu+PUCQln6XD/xbPbYsZ3WEsPe4AitQuwhmoA==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-lf1-f52.google.com) smtp.remote-ip=209.85.167.52; dkim=pass header.d=gmail.com header.s=20230601 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1712356600; bh=rOlOcrDuifjYkOai39JtdJ8vT1VSlSurs3HY5Jhp6w8=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Transfer-Encoding:MIME-Version:Message-ID:Date: Subject:To:From:DKIM-Signature:DKIM-Signature; b=IXPCvcJ9Y8W9ebkbaB24uPUAJFMqHku6P8LsKttRC5gfddnh65q8+nsT/uj4/cCYH+mdm0TmOT fRXbKv/7Zb46i0oyMS5Pxo3nRfz2xs8Q4kr2TzWAz3J1w38kpWUHMHhNg/RCH7NJqR4CFQ+v8N bUez3itDk/Uh4nuFTSoXpWUx7a8oCF+iiDwGUcR8xnjABlj/yB6W3zRshwNTGhcbhhFGs0zqMl Rii/PoxZ0coRVvhBftpSTL5ak6IluTLmu/BxbNm1Pw5kZ9RTB/OI24GaMA/bjs6q/nB4ZOtobY 55UEUvoroWKulzZwMOnXX36YyoafslFKYy+ndR/fkNc8Eg==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Transfer-Encoding: MIME-Version:Message-Id:Date:Subject:To:From:Reply-To:Cc:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References; bh=c7Ga7oLg4UszGx8pXaOk2/MZ84ttVP5vlmMgkrMoV/s=; b=Gnp1zoy7CUBG643yc0LB1hchst uKa2uBK7ZhPn6FCNygAn5egalPA/xVmLzmVBgpeh8GuoFbDFH0uPewGULg/3roQ8nobXlwBGu5ssl Bz7P95QY4F9ccjZGp54U/OpUd5VLsYvLzb12Zy/xnGiJrWqGvqSze1pG6jaXwfowWpp5qknouOk1O AaCU+OxxOrT6kbYdxrb7nFVnYSSx4GdIvERDdBjdIU7pFgGphYS92E+BkUbW8STuShxl5RjIyvcL9 aoDyU3DFllLO26RVRgY1ZINVwiYg+/oDq51GxzNgqRMeagFGvypOVpaiW39pgMkxGeHsrQ0HMvDiP aA1j2CKg==; Received: by zero.zsh.org with local id 1rssAp-0006qW-Hw; Fri, 05 Apr 2024 22:36:39 +0000 Authentication-Results: zsh.org; iprev=pass (mail-lf1-f52.google.com) smtp.remote-ip=209.85.167.52; dkim=pass header.d=gmail.com header.s=20230601 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-lf1-f52.google.com ([209.85.167.52]:45103) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1rss9e-0006Vl-Th; Fri, 05 Apr 2024 22:35:27 +0000 Received: by mail-lf1-f52.google.com with SMTP id 2adb3069b0e04-516d536f6f2so1285719e87.2 for ; Fri, 05 Apr 2024 15:35:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712356526; x=1712961326; darn=zsh.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to; bh=c7Ga7oLg4UszGx8pXaOk2/MZ84ttVP5vlmMgkrMoV/s=; b=dL88mAkjQ+62IW2v9zjLo/f6DeNKG7QkFfrPxipq9/EUx1FJkYwT/w2/THvcO5ZEz/ kQZalZXtsJ0f1chjs0+VbrVINpi/QraqpXQHGWARyYCnpxspS4GfsS8kTIMR3/rAmOUU dqmY2r0TJwZ0sSLvNY4izCVqqsMLdOTFujkLR1cs10kHXG+rp+Ur0NvNV8GY7Wo+59Vn TtRTCapKnoidLKvU+fcoMBo8RtEp4MJC2uD6fIamSQVB94fq+mIyf0xd0RbQpt+G7amQ WGjJcq8GJYuM61HnV5cPfwr/DvzcLjg6r9eFYMdeE7YnT1g6RGoaOM1iTvwbWO+N1R6L 0JvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712356526; x=1712961326; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=c7Ga7oLg4UszGx8pXaOk2/MZ84ttVP5vlmMgkrMoV/s=; b=pOPZGq1QY8EET54mF75q/MmxAtkGUkuf+DUf88a+0J264eWcWPe5rFGYqQfRUi3NiK 5205zvrlvFazx0h8YbeF9Ym2Udvv7ShuKUZHsC59LIF1J8vQzGCo/y9zd9XcTro8KvP8 Xl9jYmdtprxICY2KscnxwntBr/uXjyWMyrf2clii+AL4SgBMCA+Yc/cMmTEGx7cBQ3mB ctpQtpcxCwIWYqjJnJGEZPG6pQ2EwtGJIynuJXNRy4oORB+mkx7xRgBHiHBf2QTXwmjD Xd9LtajDa/qQyu2ooY33JiOBGFnP99r5ttE3t9iYbEQNpRnylfw4PXoseVmyOTdSfTrP lNIQ== X-Gm-Message-State: AOJu0Yz/AFiUvIDmUPEPCNYjPYvSF/1gGT1WawwQpDMbB5IourJZCJn5 lR8PvMtu+CR7jmAwnspxQsBXelK5rVbEPoCT+gj6rhKivwxd7C0s1CBzA3a5 X-Google-Smtp-Source: AGHT+IHaRdM+rP7gY6mS+yB1cKYIA+eUrupQQf5bwvfzOhkEGscTrLOKJtbVIKCce7UD/h/K9HhXgA== X-Received: by 2002:a05:6512:523:b0:516:c1bf:8ddb with SMTP id o3-20020a056512052300b00516c1bf8ddbmr2033584lfc.66.1712356525405; Fri, 05 Apr 2024 15:35:25 -0700 (PDT) Received: from localhost.localdomain (h-94-254-94-11.A230.priv.bahnhof.se. [94.254.94.11]) by smtp.gmail.com with ESMTPSA id g16-20020ac25390000000b005158c44d8casm302803lfh.97.2024.04.05.15.35.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Apr 2024 15:35:24 -0700 (PDT) From: Mikael Magnusson To: zsh-workers@zsh.org Subject: PATCH: Fix ${foo:^bar} where bar is an associative array Date: Sat, 6 Apr 2024 00:35:23 +0200 Message-Id: <20240405223523.29765-1-mikachu@gmail.com> X-Mailer: git-send-email 2.38.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Seq: 52878 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: The getaparam function checks that the returned value is an array, otherwise returns NULL, the getsparam function does no such check, so we get a stringified version of our associative array. Before this patch, % typeset -A foo=([one]=1 [two]=2 [three]=3) bar=([four]=4 [five]=5 [six]=6) % print -f '_%s_' ${foo:^bar}; echo _1__5 4 6_ % print -f '_%s_' ${foo:^^bar}; echo _1__5 4 6__2__5 4 6__3__5 4 6_ After, % print -f '_%s_' ${foo:^bar}; echo _1__5__2__4__3__6_ % print -f '_%s_' ${foo:^^bar}; echo _1__5__2__4__3__6_ A similar fix might also be possible for the :|/:* code, but I'm a little too tired to figure out what's going on there. There are no other uses of getaparam in subst.c than those at least. (I also noticed that there are only 2 prior uses of gethparam and none of gethkparam). --- Src/subst.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Src/subst.c b/Src/subst.c index f0d6c7a7b1..56a29bf0a4 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -3473,7 +3473,10 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags, val = dupstring(""); } else { char *sval; - zip = getaparam(s); + zip = gethparam(s); + if (!zip) { + zip = getaparam(s); + } if (!zip) { sval = getsparam(s); if (sval) -- 2.38.1