From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 151961FF13C for ; Thu, 19 Feb 2026 15:56:30 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A327618573; Thu, 19 Feb 2026 15:57:07 +0100 (CET) From: Stefan Hanreich To: pve-devel@lists.proxmox.com Subject: [PATCH pve-manager 02/11] ui: fix parsing of property-strings when values contain = Date: Thu, 19 Feb 2026 15:56:35 +0100 Message-ID: <20260219145649.441418-19-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260219145649.441418-1-s.hanreich@proxmox.com> References: <20260219145649.441418-1-s.hanreich@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.176 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Message-ID-Hash: BAO3Z2SYBLMFG2KFRX2UQNR5BZDLBAVX X-Message-ID-Hash: BAO3Z2SYBLMFG2KFRX2UQNR5BZDLBAVX X-MailFrom: hoan@cray.proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: The old parsing logic utilized split with the limit parameter for parsing key=value pairs in a property string. String.splt() doesn't stop at splitting after `limit` occurences of the specified separator, but rather splits the whole string and then only returns the first 'limit' parts from the result. This leads to issues with values that contain an equals sign, since the returned value only includes the string up until the first occurence of an equals sign. This is particularly problematic when the value is a base64 string, which are commonly padded by utilizing an equals sign. Use indexOf instead to find the first occurence of an equals sign, and then split the property into key and value at only that index. This allows for equals signs in values (but not keys). Signed-off-by: Stefan Hanreich --- www/manager6/Parser.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/www/manager6/Parser.js b/www/manager6/Parser.js index 5e7e87df6..4676a7eca 100644 --- a/www/manager6/Parser.js +++ b/www/manager6/Parser.js @@ -54,7 +54,12 @@ Ext.define('PVE.Parser', { try { value.split(',').forEach((property) => { - let [k, v] = property.split('=', 2); + let idx = property.indexOf('='); + let [k, v] = + idx === -1 + ? [property, null] + : [property.substring(0, idx), property.substring(idx + 1)]; + if (Ext.isDefined(v)) { res[k] = v; } else if (Ext.isDefined(defaultKey)) { -- 2.47.3