projects
/
open-adventure.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Prevent division by zero
[open-adventure.git]
/
saveresume.c
diff --git
a/saveresume.c
b/saveresume.c
index 6027096abf1e6035ed4e2bad18dfcb4aed29e953..fdb9ffb2fbafdca479db816fc0efde60f2fde7bc 100644
(file)
--- a/
saveresume.c
+++ b/
saveresume.c
@@
-134,8
+134,12
@@
bool is_valid(struct game_t valgame)
* valid: no states are outside minimal or maximal value
*/
* valid: no states are outside minimal or maximal value
*/
- /* Bounds check for locations
- */
+ /* Prevent division by zero */
+ if (valgame.abbnum == 0) {
+ return false;
+ }
+
+ /* Bounds check for locations */
if ( valgame.chloc < -1 || valgame.chloc > NLOCATIONS ||
valgame.chloc < -1 || valgame.chloc > NLOCATIONS ||
valgame.loc < -1 || valgame.loc > NLOCATIONS ||
if ( valgame.chloc < -1 || valgame.chloc > NLOCATIONS ||
valgame.chloc < -1 || valgame.chloc > NLOCATIONS ||
valgame.loc < -1 || valgame.loc > NLOCATIONS ||
@@
-144,8
+148,7
@@
bool is_valid(struct game_t valgame)
valgame.oldloc < -1 || valgame.oldloc > NLOCATIONS) {
return false;
}
valgame.oldloc < -1 || valgame.oldloc > NLOCATIONS) {
return false;
}
- /* Bounds check for location arrays
- */
+ /* Bounds check for location arrays */
for (int i = 0; i <= NDWARVES; i++) {
if (valgame.dloc[i] < -1 || valgame.dloc[i] > NLOCATIONS ||
valgame.odloc[i] < -1 || valgame.odloc[i] > NLOCATIONS) {
for (int i = 0; i <= NDWARVES; i++) {
if (valgame.dloc[i] < -1 || valgame.dloc[i] > NLOCATIONS ||
valgame.odloc[i] < -1 || valgame.odloc[i] > NLOCATIONS) {
@@
-185,7
+188,7
@@
bool is_valid(struct game_t valgame)
}
/* Check that properties of objects aren't beyond expected */
}
/* Check that properties of objects aren't beyond expected */
- for (
in
t obj = 0; obj <= NOBJECTS; obj++) {
+ for (
obj_
t obj = 0; obj <= NOBJECTS; obj++) {
if (valgame.prop[obj] < STATE_NOTFOUND || valgame.prop[obj] > 1) {
switch (obj) {
case RUG:
if (valgame.prop[obj] < STATE_NOTFOUND || valgame.prop[obj] > 1) {
switch (obj) {
case RUG:
@@
-210,9
+213,14
@@
bool is_valid(struct game_t valgame)
}
}
}
}
- /* Check that
we have objects at location
s */
+ /* Check that
values in linked lists for objects in locations are inside bound
s */
for (loc_t loc = LOC_NOWHERE; loc <= NLOCATIONS; loc++) {
for (loc_t loc = LOC_NOWHERE; loc <= NLOCATIONS; loc++) {
- if (valgame.atloc[loc] < NO_OBJECT || valgame.atloc[loc] > NOBJECTS * 2 + 1) {
+ if (valgame.atloc[loc] < NO_OBJECT || valgame.atloc[loc] > NOBJECTS * 2) {
+ return false;
+ }
+ }
+ for (obj_t obj = 0; obj <= NOBJECTS * 2; obj++ ) {
+ if (valgame.link[obj] < NO_OBJECT || valgame.link[obj] > NOBJECTS * 2) {
return false;
}
}
return false;
}
}