From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 1485A1FF13C for ; Thu, 02 Apr 2026 10:11:48 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id EE6DABEE7; Thu, 2 Apr 2026 10:12:15 +0200 (CEST) From: Stefan Hanreich To: pve-devel@lists.proxmox.com Subject: [PATCH pve-manager v2 16/25] ui: fix parsing of property-strings when values contain = Date: Thu, 2 Apr 2026 10:11:36 +0200 Message-ID: <20260402081148.76276-17-s.hanreich@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260402081148.76276-1-s.hanreich@proxmox.com> References: <20260402081148.76276-1-s.hanreich@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1775117457329 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.703 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: PFFNOP4JJEW5ORZDHRA5EVGNK56BZ7NI X-Message-ID-Hash: PFFNOP4JJEW5ORZDHRA5EVGNK56BZ7NI X-MailFrom: s.hanreich@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