From d4a9e4c0332413e48c9b2775323f2e85e44d322a Mon Sep 17 00:00:00 2001 From: Chen Wu Date: Sun, 23 Nov 2025 13:23:37 +0800 Subject: [PATCH] [fetch] Fix double free in fetch_free() with streaming fetch requests fetch->data will be allocated and freed in onprogress if fetch attribute EMSCRIPTEN_FETCH_STREAM_DATA is used, however it will still be freed in fetch_free() causing double free problem. --- system/lib/fetch/emscripten_fetch.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/system/lib/fetch/emscripten_fetch.c b/system/lib/fetch/emscripten_fetch.c index f180641deeb70..0170ff15913bb 100644 --- a/system/lib/fetch/emscripten_fetch.c +++ b/system/lib/fetch/emscripten_fetch.c @@ -247,7 +247,9 @@ void emscripten_fetch_free_unpacked_response_headers(char **unpackedHeaders) { static void fetch_free(emscripten_fetch_t* fetch) { emscripten_fetch_free(fetch->id); fetch->id = 0; - free((void*)fetch->data); + if (!(fetch->__attributes.attributes & EMSCRIPTEN_FETCH_STREAM_DATA)) { + free((void*)fetch->data); + } free((void*)fetch->url); free((void*)fetch->__attributes.destinationPath); free((void*)fetch->__attributes.userName);