From 68f4144cc96fb4f7ac5a2495a344e314a9a492db Mon Sep 17 00:00:00 2001 From: UnknownShadow200 Date: Mon, 3 Aug 2020 23:12:58 +1000 Subject: [PATCH] Add module.saveBlob function for web client Also try to avoid terminating game when invalid huffman code is read when inflating data --- src/Deflate.c | 2 +- src/Errors.h | 3 ++- src/Menus.c | 18 +----------------- src/Platform.c | 19 +++++++++++++++++++ 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/src/Deflate.c b/src/Deflate.c index 6b78b6b97..96ffd59a3 100644 --- a/src/Deflate.c +++ b/src/Deflate.c @@ -291,7 +291,7 @@ static int Huffman_Decode(struct InflateState* state, struct HuffmanTable* table } } - Logger_Abort("DEFLATE - Invalid huffman code"); + Inflate_Fail(state, INF_ERR_INVALID_CODE); return -1; } diff --git a/src/Errors.h b/src/Errors.h index ea364b436..2a770018c 100644 --- a/src/Errors.h +++ b/src/Errors.h @@ -51,6 +51,7 @@ enum ERRORS_ALL { /* OpenAL initing errors */ AL_ERR_INIT_DEVICE, AL_ERR_INIT_CONTEXT, /* Inflate errors */ - INF_ERR_BLOCKTYPE, INF_ERR_LEN_VERIFY, INF_ERR_REPEAT_BEG, INF_ERR_REPEAT_END + INF_ERR_BLOCKTYPE, INF_ERR_LEN_VERIFY, INF_ERR_REPEAT_BEG, INF_ERR_REPEAT_END, + INF_ERR_INVALID_CODE }; #endif diff --git a/src/Menus.c b/src/Menus.c index a768186bf..08bbf224d 100644 --- a/src/Menus.c +++ b/src/Menus.c @@ -1272,23 +1272,7 @@ static void DownloadMap(const String* path) { var data = HEAPU8.subarray($1, $1 + $2); var blob = new Blob([data], { type: 'application/octet-stream' }); var name = UTF8ToString($0); - - if (window.navigator.msSaveBlob) { - window.navigator.msSaveBlob(blob, name); - return; - } - - var url = window.URL.createObjectURL(blob); - var elem = document.createElement('a'); - - elem.href = url; - elem.download = name; - elem.style.display = 'none'; - - document.body.appendChild(elem); - elem.click(); - document.body.removeChild(elem); - window.URL.revokeObjectURL(url); + Module.saveBlob(blob, name); }, str, ptr, len); Chat_Add1("&eDownloaded map: %s", &file); diff --git a/src/Platform.c b/src/Platform.c index 0f2dde690..0626a8520 100644 --- a/src/Platform.c +++ b/src/Platform.c @@ -1659,6 +1659,25 @@ void Platform_Init(void) { /* Check if an error occurred when pre-loading IndexedDB */ EM_ASM_({ if (window.cc_idbErr) stringToUTF8(window.cc_idbErr, $0, 64); }, tmp); + EM_ASM({ + Module.saveBlob = function(blob, name) { + if (window.navigator.msSaveBlob) { + window.navigator.msSaveBlob(blob, name); return; + } + var url = window.URL.createObjectURL(blob); + var elem = document.createElement('a'); + + elem.href = url; + elem.download = name; + elem.style.display = 'none'; + + document.body.appendChild(elem); + elem.click(); + document.body.removeChild(elem); + window.URL.revokeObjectURL(url); + } + }); + if (!tmp[0]) return; Chat_Add1("&cError preloading IndexedDB: %c", tmp); Chat_AddRaw("&cPreviously saved settings/maps will be lost");