mirror of
https://github.com/clusterio/clusterio.git
synced 2026-11-12 23:04:52 +09:00
downloadFile opens a write stream before fetching, but only closed the stream and removed the file it was writing to when the server answered with a bad status. A request that never reached the server, or a connection dropped part way through the body, left both the temporary file and an open file handle behind. Mods are downloaded through this in a Promise.all over every mod in a pack, so one bad moment on the network scatters temporary files across the mods directory. They are not harmless: createTempWriteStream picks the first free name, so each leftover file permanently shifts the name used for later downloads of the same mod, as the existing "should not overwrite existing temp files" test describes. Move the fetch and the body write into a try block and discard the stream and its file on the way out. Destroy rather than end the stream, as the content is being thrown away, and skip both if the stream has already closed so that a failure after the body was written does not wait forever for a close event that has already fired. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Common Library for Clusterio
This package contains functionality shared between controller, host, ctl and/or plugins of Clusterio.
See the Clusterio repository for more information on Clusterio.