Patch from James H to fix some off-by-one errors in Guess's click

rectangle checking, preventing array bounds violation.

[originally from svn r8409]
This commit is contained in:
Simon Tatham
2009-01-12 20:30:12 +00:00
parent 4a202808ee
commit 96315bc2ba

14
guess.c
View File

@ -655,20 +655,24 @@ static char *interpret_move(game_state *from, game_ui *ui, game_drawstate *ds,
if (from->solved) return NULL; if (from->solved) return NULL;
if (x >= COL_OX && x <= (COL_OX + COL_W) && if (x >= COL_OX && x < (COL_OX + COL_W) &&
y >= COL_OY && y <= (COL_OY + COL_H)) { y >= COL_OY && y < (COL_OY + COL_H)) {
over_col = ((y - COL_OY) / PEGOFF) + 1; over_col = ((y - COL_OY) / PEGOFF) + 1;
assert(over_col >= 1 && over_col <= ds->colours->npegs);
} else if (x >= guess_ox && } else if (x >= guess_ox &&
y >= guess_oy && y <= (guess_oy + GUESS_H)) { y >= guess_oy && y < (guess_oy + GUESS_H)) {
if (x <= (guess_ox + GUESS_W)) { if (x < (guess_ox + GUESS_W)) {
over_guess = (x - guess_ox) / PEGOFF; over_guess = (x - guess_ox) / PEGOFF;
assert(over_guess >= 0 && over_guess < ds->solution->npegs);
} else { } else {
over_hint = 1; over_hint = 1;
} }
} else if (x >= guess_ox && x <= (guess_ox + GUESS_W) && } else if (x >= guess_ox && x < (guess_ox + GUESS_W) &&
y >= GUESS_OY && y < guess_oy) { y >= GUESS_OY && y < guess_oy) {
over_past_guess_y = (y - GUESS_OY) / PEGOFF; over_past_guess_y = (y - GUESS_OY) / PEGOFF;
over_past_guess_x = (x - guess_ox) / PEGOFF; over_past_guess_x = (x - guess_ox) / PEGOFF;
assert(over_past_guess_y >= 0 && over_past_guess_y < from->next_go);
assert(over_past_guess_x >= 0 && over_past_guess_x < ds->solution->npegs);
} }
debug(("make_move: over_col %d, over_guess %d, over_hint %d," debug(("make_move: over_col %d, over_guess %d, over_hint %d,"
" over_past_guess (%d,%d)", over_col, over_guess, over_hint, " over_past_guess (%d,%d)", over_col, over_guess, over_hint,