Skip to content

Commit d0a430a

Browse files
authored
Handle malloc failures in emscripten_fetch_unpack_response_headers (#24043)
`emscripten_fetch_unpack_response_headers` now returns `NULL` when `malloc` fails.
1 parent 1d45643 commit d0a430a

1 file changed

Lines changed: 13 additions & 3 deletions

File tree

system/lib/fetch/emscripten_fetch.c

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,9 @@ char **emscripten_fetch_unpack_response_headers(const char *headersString) {
197197
numHeaders++;
198198
}
199199
char **unpackedHeaders = (char**)malloc(sizeof(char*) * ((numHeaders * 2) + 1));
200+
if (!unpackedHeaders) {
201+
return NULL;
202+
}
200203
unpackedHeaders[numHeaders * 2] = NULL;
201204

202205
// Allocate each header.
@@ -206,17 +209,24 @@ char **emscripten_fetch_unpack_response_headers(const char *headersString) {
206209
const char *split = strchr(rowStart, ':');
207210
size_t headerSize = (size_t)split - (size_t)rowStart;
208211
char* header = (char*)malloc(headerSize + 1);
212+
unpackedHeaders[headerNum] = header;
213+
if (!header) {
214+
emscripten_fetch_free_unpacked_response_headers(unpackedHeaders);
215+
return NULL;
216+
}
209217
strncpy(header, rowStart, headerSize);
210218
header[headerSize] = '\0';
211219

212220
size_t valueSize = (size_t)rowEnd - (size_t)split;
213221
char* value = (char*)malloc(valueSize + 1);
222+
unpackedHeaders[headerNum+1] = value;
223+
if (!value) {
224+
emscripten_fetch_free_unpacked_response_headers(unpackedHeaders);
225+
return NULL;
226+
}
214227
strncpy(value, split + 1, valueSize);
215228
value[valueSize] = '\0';
216229

217-
unpackedHeaders[headerNum] = header;
218-
unpackedHeaders[headerNum+1] = value;
219-
220230
rowStart = rowEnd + 1;
221231
rowEnd = strchr(rowStart, '\n');
222232
}

0 commit comments

Comments
 (0)