chiark / gitweb /
Fix NUL-termination bug in saving from Javascript.
authorSimon Tatham <anakin@pobox.com>
Thu, 21 Jun 2018 17:54:08 +0000 (18:54 +0100)
committerSimon Tatham <anakin@pobox.com>
Thu, 21 Jun 2018 17:54:08 +0000 (18:54 +0100)
The JS code that retrieves the save-file data from emcc.c doesn't
receive a separate length value, but instead expects the data to be in
the form of a NUL-terminated string. But emcc.c wasn't NUL-terminating
it, so the save data could come out with random cruft on the end.

emcc.c

diff --git a/emcc.c b/emcc.c
index 563fbe2799a02b0c67c4462cd6e7f97cc91e33d3..1d16d206af0292aa5e1c61f0be5ba8adbb66701e 100644 (file)
--- a/emcc.c
+++ b/emcc.c
@@ -806,11 +806,15 @@ char *get_save_file(void)
     midend_serialise(me, savefile_write, &ctx);
     size = ctx.pos;
 
-    /* Second pass, to actually write out the data */
-    ctx.buffer = snewn(size, char);
+    /* Second pass, to actually write out the data. We have to put a
+     * terminating \0 on the end (which we expect never to show up in
+     * the actual serialisation format - it's text, not binary) so
+     * that the Javascript side can easily find out the length. */
+    ctx.buffer = snewn(size+1, char);
     ctx.pos = 0;
     midend_serialise(me, savefile_write, &ctx);
     assert(ctx.pos == size);
+    ctx.buffer[ctx.pos] = '\0';
 
     return ctx.buffer;
 }