diff options
| author | Simon Tatham <anakin@pobox.com> | 2009-07-01 22:01:21 +0000 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2009-07-01 22:01:21 +0000 |
| commit | cfdba00313386042c38460def6fe141b252858fe (patch) | |
| tree | 28e6a53dd57a145cd175bb6d0697c7459d15a5cb | |
| parent | 652f03a8aefa3267bd0acad64eadcdcd23cdf507 (diff) | |
| download | puzzles-cfdba00313386042c38460def6fe141b252858fe.zip puzzles-cfdba00313386042c38460def6fe141b252858fe.tar.gz puzzles-cfdba00313386042c38460def6fe141b252858fe.tar.bz2 puzzles-cfdba00313386042c38460def6fe141b252858fe.tar.xz | |
More defensive-coding fixes from James H.
[originally from svn r8605]
| -rw-r--r-- | cube.c | 1 | ||||
| -rw-r--r-- | filling.c | 4 | ||||
| -rw-r--r-- | loopy.c | 3 | ||||
| -rw-r--r-- | pattern.c | 1 |
4 files changed, 7 insertions, 2 deletions
@@ -996,6 +996,7 @@ static void free_game(game_state *state) sfree(state->grid->squares); sfree(state->grid); } + sfree(state->bluemask); sfree(state->facecolours); sfree(state); } @@ -1500,7 +1500,7 @@ static void draw_grid(drawing *dr, game_drawstate *ds, game_state *state, 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 @@ static void draw_grid(drawing *dr, game_drawstate *ds, game_state *state, 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; /* @@ -1513,6 +1513,7 @@ static void add_full_clues(game_state *state, random_state *rs) 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 @@ static game_state *execute_move(game_state *state, char *move) while (*move) { i = atoi(move); + if (i < 0 || i >= newstate->game_grid->num_edges) + goto fail; move += strspn(move, "1234567890"); switch (*(move++)) { case 'y': @@ -1045,6 +1045,7 @@ static game_drawstate *game_new_drawstate(drawing *dr, game_state *state) 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; } |