ref: cfdba00313386042c38460def6fe141b252858fe
parent: 652f03a8aefa3267bd0acad64eadcdcd23cdf507
author: Simon Tatham <[email protected]>
date: Wed Jul 1 18:01:21 EDT 2009
More defensive-coding fixes from James H. [originally from svn r8605]
--- a/cube.c
+++ b/cube.c
@@ -996,6 +996,7 @@
sfree(state->grid->squares);
sfree(state->grid);
}
+ sfree(state->bluemask);
sfree(state->facecolours);
sfree(state);
}
--- a/filling.c
+++ b/filling.c
@@ -1500,7 +1500,7 @@
if (flashy || !shading) {
/* clear all background flags */
- } else if (ui->sel && ui->sel[y*w+x]) {
+ } else if (ui && ui->sel && ui->sel[y*w+x]) {
flags |= HIGH_BG;
} else if (v) {
int size = dsf_size(ds->dsf_scratch, y*w+x);
@@ -1509,7 +1509,7 @@
else if (size > v)
flags |= ERROR_BG;
}
- if (ui->cur_visible && x == ui->cur_x && y == ui->cur_y)
+ if (ui && ui->cur_visible && x == ui->cur_x && y == ui->cur_y)
flags |= CURSOR_SQ;
/*
--- a/loopy.c
+++ b/loopy.c
@@ -1513,6 +1513,7 @@
face_scores = snewn(num_faces, struct face_score);
for (i = 0; i < num_faces; i++) {
face_scores[i].random = random_bits(rs, 31);
+ face_scores[i].black_score = face_scores[i].white_score = 0;
}
/* Colour a random, finite face white. The infinite face is implicitly
@@ -3232,6 +3233,8 @@
while (*move) {
i = atoi(move);
+ if (i < 0 || i >= newstate->game_grid->num_edges)
+ goto fail;
move += strspn(move, "1234567890");
switch (*(move++)) {
case 'y':
--- a/pattern.c
+++ b/pattern.c
@@ -1045,6 +1045,7 @@
ds->visible = snewn(ds->w * ds->h, unsigned char);
ds->tilesize = 0; /* not decided yet */
memset(ds->visible, 255, ds->w * ds->h);
+ ds->cur_x = ds->cur_y = 0;
return ds;
}