mirror of
git://git.tartarus.org/simon/puzzles.git
synced 2025-04-21 16:05:44 -07:00
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:
14
guess.c
14
guess.c
@ -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,
|
||||||
|
Reference in New Issue
Block a user