From: "Stefan Sterz" <s.sterz@proxmox.com>
To: "Proxmox VE development discussion" <pve-devel@lists.proxmox.com>
Subject: Re: [pve-devel] [PATCH widget-toolkit 3/3] window: edit: avoid shared object for extra request params
Date: Thu, 04 Apr 2024 10:22:06 +0200 [thread overview]
Message-ID: <D0B6YC1ETEX7.18Y1P4WQZXBCR@proxmox.com> (raw)
In-Reply-To: <20240403091010.11544-4-f.weber@proxmox.com>
On Wed Apr 3, 2024 at 11:10 AM CEST, Friedrich Weber wrote:
> 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 <f.weber@proxmox.com>
> ---
>
> 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;
i did a quick an dirty test and using a constructor like this seems to
rule out this class of bug completelly:
```js
constructor: function(conf) {
let me = this;
me.extraRequestParams = {};
me.initConfig(conf);
me.callParent();
},
```
basically it configures the edit window as usual, but overwrites the
`extraRequestParams` object for each instance with a new empty object.
so there are no more shared objects :) could you check whether that also
fixes the other instances?
[1]: https://docs-devel.sencha.com/extjs/7.0.0/classic/Ext.window.Window.html#method-constructor
next prev parent reply other threads:[~2024-04-04 8:22 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-03 9:10 [pve-devel] [PATCH manager/widget-toolkit 0/3] ui: avoid UI bugs due to shared " Friedrich Weber
2024-04-03 9:10 ` [pve-devel] [PATCH manager 1/3] ui: pool members: avoid setting request parameter for all edit windows Friedrich Weber
2024-04-03 9:10 ` [pve-devel] [PATCH manager 2/3] ui: pool members: avoid sharing object for extra request parameters Friedrich Weber
2024-04-03 9:10 ` [pve-devel] [PATCH widget-toolkit 3/3] window: edit: avoid shared object for extra request params Friedrich Weber
2024-04-04 8:22 ` Stefan Sterz [this message]
2024-04-04 9:01 ` Friedrich Weber
2024-04-04 9:23 ` Stefan Sterz
2024-04-04 10:10 ` Friedrich Weber
2024-04-04 10:54 ` Stefan Sterz
2024-04-04 11:04 ` Stefan Sterz
2024-04-04 10:59 ` Thomas Lamprecht
2024-04-04 11:28 ` Friedrich Weber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=D0B6YC1ETEX7.18Y1P4WQZXBCR@proxmox.com \
--to=s.sterz@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.