X-Git-Url: https://git.distorted.org.uk/~mdw/sgt/puzzles/blobdiff_plain/f60f7e7c3f3589b57214fd76c6919bb4dafd8d2c..f0ee053c2a4a214a0e77b22462d0c42806d0462b:/midend.c diff --git a/midend.c b/midend.c index ce0a315..070f4f3 100644 --- a/midend.c +++ b/midend.c @@ -135,11 +135,16 @@ void midend_new_game(midend_data *me) /* * Generate a new random seed. 15 digits comes to about * 48 bits, which should be more than enough. + * + * I'll avoid putting a leading zero on the number, + * just in case it confuses anybody who thinks it's + * processed as an integer rather than a string. */ char newseed[16]; int i; newseed[15] = '\0'; - for (i = 0; i < 15; i++) + newseed[0] = '1' + random_upto(me->random, 9); + for (i = 1; i < 15; i++) newseed[i] = '0' + random_upto(me->random, 10); sfree(me->seedstr); me->seedstr = dupstr(newseed); @@ -748,18 +753,23 @@ static char *midend_game_id_int(midend_data *me, char *id, int defmode) if (seed || desc) { char *tmpstr = me->ourgame->encode_params(tmpparams, FALSE); me->ourgame->decode_params(me->params, tmpstr); + sfree(tmpstr); } else { me->ourgame->free_params(me->params); me->params = me->ourgame->dup_params(tmpparams); } } + sfree(me->desc); + me->desc = NULL; + sfree(me->seedstr); + me->seedstr = NULL; + if (desc) { error = me->ourgame->validate_desc(me->params, desc); if (error) return error; - sfree(me->desc); me->desc = dupstr(desc); me->genmode = GOT_DESC; if (me->aux_info) @@ -768,7 +778,6 @@ static char *midend_game_id_int(midend_data *me, char *id, int defmode) } if (seed) { - sfree(me->seedstr); me->seedstr = dupstr(seed); me->genmode = GOT_SEED; }