From: Simon Tatham Date: Thu, 21 Jun 2018 17:54:08 +0000 (+0100) Subject: Fix NUL-termination bug in saving from Javascript. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=3618f6a07f71336ad5741836afb6aeb6cae3ff99;p=sgt-puzzles.git Fix NUL-termination bug in saving from Javascript. 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. --- diff --git a/emcc.c b/emcc.c index 563fbe2..1d16d20 100644 --- 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; }