From: Thomas Lamprecht <t.lamprecht@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
Matthias Heiserer <m.heiserer@proxmox.com>
Subject: [pve-devel] applied: [PATCH v2 http-server 2/2] AnyEvent: Fix #3990 - make small files uploadable
Date: Thu, 29 Sep 2022 17:13:16 +0200 [thread overview]
Message-ID: <3ccc7309-1dee-118c-fec3-409bdbb90c8c@proxmox.com> (raw)
In-Reply-To: <20220513134900.440420-2-m.heiserer@proxmox.com>
Am 13/05/2022 um 15:49 schrieb Matthias Heiserer:
> == The problem
> Upload of files smaller than ~16kb failed.
> This was because the code assumed that it would be called
> several times, and each time would do a certain action.
> When the whole file was in the buffer, this failed because
> the function would try parssing the first part in the payload and
> then return, instead of parsing the rest of the available data.
>
> == Why not just modifying the current code a bit?
> The code had a lot of nested control statements and a
> non-intuitive control flow (phase 0->2->1->1->1 and so on).
>
> The way the phases and buffer content were checked made it
> rather difficult to just fix a few lines.
>
> == What was changed
> * Part headers are parsed with a single regex line each,
> which improves code readability.
>
> * Parsing the content is done in order, so even if the whole data is in the buffer,
> it can be read in one go. Files of arbitrary sizes can be uploaded.
>
> == Tested with
> * Uploaded 0B, 1B, 14KB, 16KB, 1GB, 10GB, 20GB files
>
> * Tested with all checksums and without
>
> * Tested on firefox, chromium, and pvesh
>
> I didn't do any fuzzing or automated upload testing.
>
> == Drawbacks & Potential issues
> * Part headers are hardcoded, adding new ones requries modifying this file
>
> == does not fix
> * upload can still time out
>
> Signed-off-by: Matthias Heiserer <m.heiserer@proxmox.com>
> ---
>
> Note:
> Regarding trim, I forgot to answer the mail.
> Trim is imo a good name, as several languagues (e.g. rust, javascript)
> use trim to mean mean "remove all whitespace, including newlines and such".
> I can send a v3 if that's a problem.
>
> Changes from v1:
> * fix whitespace in separate patch
> * move trim into inline closure
> * correctly call trim
> * replace [^\S] with \S in regexes
> * improve trim regex: don't replace string
> * check for phase 1 once
> * remove regex comment
>
> src/PVE/APIServer/AnyEvent.pm | 146 ++++++++++++++++++----------------
> 1 file changed, 76 insertions(+), 70 deletions(-)
>
>
applied, with slightly reworking the commit messages subject and Daniel's T-b tag,
thanks to both!
Note that I made some follow ups trying to improve a few things of your change and the
existing code. E.g.: $string in trim wasn't used anywhere, same for $eof in phase 2.
The content-disposition extraction could be factored in a small closure to reduce code
size and (IMO) legibility, and some other smaller style/formatting stuff.
None of that was a blocker, and due to the age of this series (sorry for that!) I
really did not want to bother for a v3 and applied changes myself. I re-tested it
with various sizes and functionality (checksum), but an additional pair of eyes
would be appreciated to ensure no regression snuck in.
next prev parent reply other threads:[~2022-09-29 15:13 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-13 13:48 [pve-devel] [PATCH v2 http-server 1/2] AnyEvent: whitespace fix Matthias Heiserer
2022-05-13 13:49 ` [pve-devel] [PATCH v2 http-server 2/2] AnyEvent: Fix #3990 - make small files uploadable Matthias Heiserer
2022-07-06 16:09 ` Daniel Tschlatscher
2022-07-12 11:32 ` Matthias Heiserer
2022-09-29 15:13 ` Thomas Lamprecht [this message]
2022-09-29 15:06 ` [pve-devel] applied: [PATCH v2 http-server 1/2] AnyEvent: whitespace fix Thomas Lamprecht
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=3ccc7309-1dee-118c-fec3-409bdbb90c8c@proxmox.com \
--to=t.lamprecht@proxmox.com \
--cc=m.heiserer@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.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal