Skip to content

Commit d4a9e4c

Browse files
committed
[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.
1 parent 35f0ffc commit d4a9e4c

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

system/lib/fetch/emscripten_fetch.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,9 @@ void emscripten_fetch_free_unpacked_response_headers(char **unpackedHeaders) {
247247
static void fetch_free(emscripten_fetch_t* fetch) {
248248
emscripten_fetch_free(fetch->id);
249249
fetch->id = 0;
250-
free((void*)fetch->data);
250+
if (!(fetch->__attributes.attributes & EMSCRIPTEN_FETCH_STREAM_DATA)) {
251+
free((void*)fetch->data);
252+
}
251253
free((void*)fetch->url);
252254
free((void*)fetch->__attributes.destinationPath);
253255
free((void*)fetch->__attributes.userName);

0 commit comments

Comments
 (0)