From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 45B2390F63 for ; Wed, 3 Apr 2024 11:11:01 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 2EEB614877 for ; Wed, 3 Apr 2024 11:11:01 +0200 (CEST) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Wed, 3 Apr 2024 11:11:00 +0200 (CEST) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 3F75B44CD5 for ; Wed, 3 Apr 2024 11:11:00 +0200 (CEST) From: Friedrich Weber To: pve-devel@lists.proxmox.com Date: Wed, 3 Apr 2024 11:10:10 +0200 Message-Id: <20240403091010.11544-4-f.weber@proxmox.com> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240403091010.11544-1-f.weber@proxmox.com> References: <20240403091010.11544-1-f.weber@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.075 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [proxmox.com] Subject: [pve-devel] [PATCH widget-toolkit 3/3] window: edit: avoid shared object for extra request params X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 03 Apr 2024 09:11:01 -0000 Currently, `Proxmox.window.Edit` initializes `extraRequestParams` to an object that, if not overwritten, is shared between all instances of subclasses. This bears the danger of modifying the shared object in a subclass instead of overwriting it, which affects all edit windows of the current session and can cause hard-to-catch UI bugs [1]. To avoid such bugs in the future, initialize `extraRequestParams` to `undefined` instead, which forces subclasses to initialize their own objects. Note that bugs of the same kind can still happen if a subclass initializes `extraRequestParams` to an empty shared object and inadvertently modifies it, but at least they will be limited to that particular subclass. [1] https://lists.proxmox.com/pipermail/pve-devel/2024-March/062179.html Signed-off-by: Friedrich Weber --- Notes: With patch 2/3 applied, I think all occurrences of `extraRequestParams` in PVE/PBS create their own object (PMG does not seem to use `extraRequestParams`), so this patch should not break anything, and if it does, it should be quite noticeable. new in v2 src/window/Edit.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/window/Edit.js b/src/window/Edit.js index d4a2b551..27cd8d01 100644 --- a/src/window/Edit.js +++ b/src/window/Edit.js @@ -9,7 +9,7 @@ Ext.define('Proxmox.window.Edit', { // to submit extra params on load and submit, useful, e.g., if not all ID // parameters are included in the URL - extraRequestParams: {}, + extraRequestParams: undefined, resizable: false, @@ -80,7 +80,9 @@ Ext.define('Proxmox.window.Edit', { let me = this; let values = {}; - Ext.apply(values, me.extraRequestParams); + if (me.extraRequestParams) { + Ext.apply(values, me.extraRequestParams); + } let form = me.formPanel.getForm(); @@ -209,7 +211,7 @@ Ext.define('Proxmox.window.Edit', { waitMsgTarget: me, }, options); - if (Object.keys(me.extraRequestParams).length > 0) { + if (me.extraRequestParams && Object.keys(me.extraRequestParams).length > 0) { let params = newopts.params || {}; Ext.applyIf(params, me.extraRequestParams); newopts.params = params; -- 2.39.2