From 064096bf611e79d7e32db67d6a50139c4de961d3 Mon Sep 17 00:00:00 2001
From: ROllerozxa <[EMAIL REDACTED]>
Date: Sun, 18 Jan 2026 05:38:36 +0100
Subject: [PATCH] Fix SDL_SetWindowIcon on singlethreaded Emscripten builds
(#14850)
---
src/video/emscripten/SDL_emscriptenvideo.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/src/video/emscripten/SDL_emscriptenvideo.c b/src/video/emscripten/SDL_emscriptenvideo.c
index e3e45bdeaab21..d440a2ff77ed2 100644
--- a/src/video/emscripten/SDL_emscriptenvideo.c
+++ b/src/video/emscripten/SDL_emscriptenvideo.c
@@ -794,11 +794,9 @@ static bool Emscripten_SetWindowIcon(SDL_VideoDevice *_this, SDL_Window *window,
// Pass PNG data to JavaScript
MAIN_THREAD_EM_ASM({
- var pngData = HEAPU8.subarray($0, $0 + $1);
- if (pngData.buffer instanceof SharedArrayBuffer) {
- // explicitly create a copy
- pngData = new Uint8Array(pngData);
- }
+ // Use `.slice` to make a copy of the data if we are dealing with a SharedArrayBuffer, or `.subarray` to create a
+ // view into the existing buffer if its non-shared.
+ var pngData = HEAPU8.buffer instanceof ArrayBuffer ? HEAPU8.subarray($0, $0 + $1) : HEAPU8.slice($0, $0 + $1);
var blob = new Blob([pngData], {type: 'image/png'});
var url = URL.createObjectURL(blob);