ProxymanApp / Proxyman

Modern. Native. Delightful Web Debugging Proxy for macOS, iOS, and Android ⚡️
https://proxyman.io
5.72k stars 189 forks source link

Image preview in multpart/form-data breaks the app #1828

Open petersamokhin opened 1 year ago

petersamokhin commented 1 year ago

Description

When you upload a multipart request where one part is an image, ProxyMan tries to preview it (great feature btw!). However, if the image part is not a valid image (or even if valid but maybe not supported by the preview tool you use), the app becomes unresponsive. Only "Force Quit Application" helps

Steps to Reproduce

  1. Make a regular multipart/form-data request
  2. Add a byte array part with content-type for some image (e.g. image/jpeg)
  3. Try to open "multipart" tab of the request
  4. (issue happens, app is unresponsive)

Current Behavior

Explained above, screenshot here:

image

Expected Behavior

Preview can be omitted, or an error text shown — but not the app frozen. For me, it is enough to "export" the "part" as a file, no need for preview at all

Environment

Actually, happens for a few versions already + different macOS versions (on Sonoma too). Managed to file an issue only now :)

NghiaTranUIT commented 1 year ago

May I ask how big the Image is? I assume it's big so Proxyman takes a lot of time to process on the main thread -> causes the app hangs 🤔

It'd be nice if you export the Request/Response (Right-click -> Export -> ProxymanLog) and share it with us at support@proxyman.io ?

petersamokhin commented 1 year ago

@NghiaTranUIT unfortunately I can't share the request 🙂 but the image is small, e.g. latest one I tested is 199 KB. Also, the app never unfreezes, waiting doesn't help

NghiaTranUIT commented 1 year ago

@petersamokhin is it 100% reproducible?

May I ask what the Request/Response Body size? (You can get this data from the Request or Response column or from the Content-Length).

Multiparts works fine on my end, including images (< 1mb) and some JSON text.

petersamokhin commented 1 year ago

@NghiaTranUIT yep, 100% reproducible every single time for me 😅

Content-Length: 199877 (most of the size is the mutlipart part). If I click on "multipart" tab instead of "raw", the app will be stuck forever

image

The next request with video (which works fine btw) is bigger. Export works with no problems, even for much bigger files (up to 100 mb at least) Content-Length: 757946

The images I upload are JPEG but theoretically may be "worse" than regular images (maybe no EXIF and worse quality), still good for Finder "Preview" and QuickLook though. My assumption to investigate would be to check any steps that interact with the image itself, parse it or try to display, and put try/catch + resource/time limitations ther

NghiaTranUIT commented 1 year ago

@petersamokhin can you try this Beta and let me know the result 👍 https://download.proxyman.io/beta/Proxyman_4.13.0_Improve_performance_Multiparts.dmg

Change log

petersamokhin commented 1 year ago

@NghiaTranUIT checked just now — no difference. Once I click on the "Multipart" tab in the request preview, the whole app freezes forever. So, the "Multipart" tab needs to be optimized, not "Raw" :)

image
NghiaTranUIT commented 1 year ago

May I ask: what macbook model are you using? 🤔

petersamokhin commented 1 year ago

@NghiaTranUIT Apple M1 Pro 32GB, 16-inch, 2021

NghiaTranUIT commented 1 year ago

@petersamokhin I'm not sure why but I can't reproduce the freeze issue on Multipart Tab 😿 . Can you try again on this Beta build: https://proxyman.s3.us-east-2.amazonaws.com/beta/Proxyman_4.13.0_Prevent_rendering_Multiparts_twice.dmg

Video

https://github.com/ProxymanApp/Proxyman/assets/5878421/974e62a5-8951-4612-8ae5-faa3c12e9231