Commit Diff


commit - 95b31f5f513d46a7ac7ba7b09ea69daf6cda3f71
commit + 60713dfc3219bc2c4992e408e0c553e763cea896
blob - 11cf1bc43d9a84fffeb993a69de85694f37ed89c
blob + 408d66b489414243abbcc0b38dae2926eb152de0
--- FICS/obsproc.c
+++ FICS/obsproc.c
@@ -982,11 +982,16 @@ FindHistory(int p, int p1, int p_game)
 
 		ret = fscanf(fpHist, "%d %*c %*d %*c %*d %*s %*s %*d %*d %*d "
 		    "%*d %*s %*s %ld", &index, &when);
-		if (ret != 2)
-			warn("%s: %s: corrupt", __func__, &fileName[0]);
-	} while (!feof(fpHist) && index != p_game);
+		if (ret != 2) {
+			warnx("%s: %s: corrupt", __func__, fileName);
+			fclose(fpHist);
+			return NULL;
+		}
+	} while (!feof(fpHist) &&
+	    !ferror(fpHist) &&
+	    index != p_game);
 
-	if (feof(fpHist)) {
+	if (feof(fpHist) || ferror(fpHist)) {
 		pprintf(p, "There is no history game %d for %s.\n", p_game,
 		    parray[p1].name);
 		fclose(fpHist);
@@ -1021,11 +1026,16 @@ FindHistory2(int p, int p1, int p_game, char *End, con
 	    "%%*d %%*d %%*d %%*s %%%zus %%ld\n", (End_size - 1));
 
 	do {
-		if (fscanf(fpHist, fmt, &index, End, &when) != 3)
-			warn("%s: %s: corrupt", __func__, &fileName[0]);
-	} while (!feof(fpHist) && index != p_game);
+		if (fscanf(fpHist, fmt, &index, End, &when) != 3) {
+			warnx("%s: %s: corrupt", __func__, fileName);
+			fclose(fpHist);
+			return NULL;
+		}
+	} while (!feof(fpHist) &&
+	    !ferror(fpHist) &&
+	    index != p_game);
 
-	if (feof(fpHist)) {
+	if (feof(fpHist) || ferror(fpHist)) {
 		pprintf(p, "There is no history game %d for %s.\n", p_game,
 		    parray[p1].name);
 		fclose(fpHist);