chiark / gitweb /
latin.c: remove a rogue array overrun.
authorSimon Tatham <anakin@pobox.com>
Sat, 28 Apr 2018 11:02:43 +0000 (12:02 +0100)
committerSimon Tatham <anakin@pobox.com>
Sat, 28 Apr 2018 11:02:43 +0000 (12:02 +0100)
Oops! This was left over from an early development version of commits
4408476b7 and 000ebc507, in which I initially arranged for each
adjacency list to be terminated with the sentinel value -1 instead of
separately storing an array of the lists' lengths.

I later changed the representation to make randomising the algorithm
easier (it's much easier to shuffle an array uniformly at random if
you _don't_ have to faff endlessly to work out its length). But this
write of a no-longer- needed sentinel value in the client code must
have survived the rewrite by mistake, and also somehow evaded all my
pre-commit testing with valgrind and asan.

A user reported that the Towers Javascript version was crashing on
startup, and I think this is the cause, because it seems to fix it for
me.

latin.c

diff --git a/latin.c b/latin.c
index 710be2c5ca05e7cbd18f331ebf812448affd5481..6e805455bf712f51ee698033933283de8bbb3e49 100644 (file)
--- a/latin.c
+++ b/latin.c
@@ -1172,7 +1172,6 @@ digit *latin_generate(int o, random_state *rs)
                 if (adj[k])
                     *p++ = k;
             adjsizes[j] = p - adjlists[j];
-            *p = -1;
         }
 
        /*