summaryrefslogtreecommitdiffstats
path: root/battlestar/save.c
diff options
context:
space:
mode:
authorhubertf <hubertf@NetBSD.org>1998-09-13 15:24:41 +0000
committerhubertf <hubertf@NetBSD.org>1998-09-13 15:24:41 +0000
commit6b2114b5ce68659ad3bd51369d0d6da044ffade1 (patch)
tree17455cf312fbff04cf251309b1b4c8756446b0da /battlestar/save.c
parent1d750a7b418d5ff128a97e0d270bae3681f64b96 (diff)
downloadbsdgames-darwin-6b2114b5ce68659ad3bd51369d0d6da044ffade1.tar.gz
bsdgames-darwin-6b2114b5ce68659ad3bd51369d0d6da044ffade1.tar.zst
bsdgames-darwin-6b2114b5ce68659ad3bd51369d0d6da044ffade1.zip
add sanity checks when saving/restoring games (PR#6138 by Joseph Myers <jsm28@cam.ac.uk>)
Diffstat (limited to 'battlestar/save.c')
-rw-r--r--battlestar/save.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/battlestar/save.c b/battlestar/save.c
index 6af3c2ee..fa24f407 100644
--- a/battlestar/save.c
+++ b/battlestar/save.c
@@ -1,4 +1,4 @@
-/* $NetBSD: save.c,v 1.7 1997/10/12 02:06:15 lukem Exp $ */
+/* $NetBSD: save.c,v 1.8 1998/09/13 15:24:41 hubertf Exp $ */
/*
* Copyright (c) 1983, 1993
@@ -38,7 +38,7 @@
#if 0
static char sccsid[] = "@(#)save.c 8.2 (Berkeley) 4/28/95";
#else
-__RCSID("$NetBSD: save.c,v 1.7 1997/10/12 02:06:15 lukem Exp $");
+__RCSID("$NetBSD: save.c,v 1.8 1998/09/13 15:24:41 hubertf Exp $");
#endif
#endif /* not lint */
@@ -57,7 +57,7 @@ restore()
strcpy(home1, home);
strcat(home1, "/Bstar");
if ((fp = fopen(home1, "r")) == 0) {
- warn("fopen %s", home1);
+ err(1, "fopen %s", home1);
return;
}
fread(&WEIGHT, sizeof WEIGHT, 1, fp);
@@ -94,7 +94,9 @@ restore()
fread(&loved, sizeof loved, 1, fp);
fread(&pleasure, sizeof pleasure, 1, fp);
fread(&power, sizeof power, 1, fp);
- fread(&ego, sizeof ego, 1, fp);
+ if (fread(&ego, sizeof ego, 1, fp) < 1)
+ errx(1, "save file %s too short", home1);
+ fclose(fp);
}
void
@@ -149,4 +151,8 @@ save()
fwrite(&pleasure, sizeof pleasure, 1, fp);
fwrite(&power, sizeof power, 1, fp);
fwrite(&ego, sizeof ego, 1, fp);
+ fflush(fp);
+ if (ferror(fp))
+ warn("fwrite %s", home1);
+ fclose(fp);
}