Vydáno ve v1.824.0, 5. 10. 2026 Oprava ve Windmillu v upstreamu
Windmill: neomezené stahování z S3 u příloh pro AI
Náš skener upozornil, že Windmill, open-source platforma pro skripty, workflow a interní nástroje, stahoval objekty z S3 použité jako přílohy pro AI celé do paměti a kódoval je do base64 bez jakéhokoli limitu velikosti. Jediný velký objekt tak mohl vyčerpat paměť workeru. Náš pull request přidal kontrolu velikosti. Správce Ruben Fiszel upozornil, že přichází příliš pozdě, a připravil lepší opravu, kterou ještě týž den vydal ve v1.824.0.
Co bylo špatně
Když zprávy kroku s AI odkazují na objekt v S3, funkce download_and_encode_s3_image() v backend/windmill-ai/src/image_handler.rs stáhla celý objekt a převedla ho na base64 data URL pro poskytovatele modelu. Velikost nic neomezovalo a úložiště workspace může obsahovat velké výstupy jobů, dumpy nebo archivy. Dost velký objekt znamenal velkou alokaci, k tomu zhruba o třetinu víc na kopii v base64, a mohl workeru vyčerpat paměť.
Jak to bylo opraveno
Náš pull request #11515 odmítal objekty nad 30 MB ještě před kódováním do base64. Review Rubena Fiszela bylo přesné:
„With the check here, a 2 GB object still gets fully buffered before the 30 MiB check runs, so it can still cause the OOM this aims to prevent.“
Souhlasili jsme a náš PR byl uzavřen ve prospěch jeho pull requestu #11534. Ten umožní pomocné funkci pro stahování z S3 převzít limit v bajtech, odmítne deklarovaný Content-Length nad limitem ještě před čtením těla a přestane číst streamovanou odpověď, jakmile překročí 30 MiB; obojí pokrývají regresní testy. Vstupy z S3 pro SQL se dál stahují bez limitu.
Časová osa
- 2. 10. 2026. Sken AI backendu Windmillu (model qwen3.8-27b) vyhodnotil neomezené stahování a kódování v
image_handler.rsjako vysokou závažnost. - 4. 10. Otevřeli jsme pull request #11515 s kontrolou velikosti před kódováním.
- 5. 10. Ruben Fiszel ho zrevidoval, otevřel a začlenil #11534 s omezeným stahováním a týž den vyšel ve v1.824.0.
Jak to číst
Náš patch ušetřil jen kopii v base64; celý objekt se stejně nejdřív načetl do paměti. Review správce to odhalilo a oprava v upstreamu je lepší než ta naše. Přínos skenu byl v tom, že ukázal na neomezenou alokaci; správnou opravu připravil ten, kdo kód zná. Nálezy jsou podněty pro lidi, ne rozsudky.