aboutsummaryrefslogtreecommitdiff
path: root/cmake/platforms/nestedvm.cmake
diff options
context:
space:
mode:
authorSimon Tatham <anakin@pobox.com>2021-05-23 08:45:55 +0100
committerSimon Tatham <anakin@pobox.com>2021-05-23 08:45:55 +0100
commitf729f51e475ff98d0caf529f0723ef810b1c88ef (patch)
tree5f76f07e6dfe9b3f38f5a4966d9ce92c398771dd /cmake/platforms/nestedvm.cmake
parent1c760b2ee808ba68781a68a57292cc841b3df5a0 (diff)
downloadpuzzles-f729f51e475ff98d0caf529f0723ef810b1c88ef.zip
puzzles-f729f51e475ff98d0caf529f0723ef810b1c88ef.tar.gz
puzzles-f729f51e475ff98d0caf529f0723ef810b1c88ef.tar.bz2
puzzles-f729f51e475ff98d0caf529f0723ef810b1c88ef.tar.xz
WASM: move save file encoding from JS into C.
The previous fix worked OK, but it was conceptually wrong. Puzzles save files are better regarded as binary, not text: the length fields are measured in bytes, so translating the file into a different multibyte character encoding would invalidate them. So it was wrong to fetch a C byte string containing the exactly right binary data, then translate it into a Javascript string as if decoding from UTF-8, then retranslate to a representation of a bytewise encoding via encodeURIComponent, and then label the result as application/octet-stream. This probably wouldn't have caused any problems in practice, because I don't remember any situation in which my save files use characters outside printable ASCII (plus newline). But it's not actually forbidden, so a save file might choose to do that some day, so that UTF-8 decode/reencode hidden in the JS was a latent bug. Now the URI-encoding is done on the C side, while we still know exactly what the binary data ought to look like and can be sure we're translating it byte for byte into the output encoding for the data: URI. By the time the JS receives a string pointer from get_save_file, it's already URI-encoded, which _guarantees_ that it's in ASCII and won't be messed about with by Emscripten's UTF8ToString.
Diffstat (limited to 'cmake/platforms/nestedvm.cmake')
0 files changed, 0 insertions, 0 deletions