diff options
Diffstat (limited to 'FICS')
-rw-r--r-- | FICS/obsproc.c | 23 | ||||
-rw-r--r-- | FICS/playerdb.c | 57 | ||||
-rw-r--r-- | FICS/playerdb.h | 1 |
3 files changed, 50 insertions, 31 deletions
diff --git a/FICS/obsproc.c b/FICS/obsproc.c index dc47cbe..283ecc3 100644 --- a/FICS/obsproc.c +++ b/FICS/obsproc.c @@ -30,6 +30,8 @@ fscanf(). Markus Uhlin 24/12/02 Improved old_mail_moves() Markus Uhlin 25/01/18 Fixed -Wshadow + Markus Uhlin 25/03/15 Fixed possible buffer overflow + in FindHistory2(). */ #include "stdinclude.h" @@ -994,9 +996,10 @@ FindHistory(int p, int p1, int p_game) } PRIVATE char * -FindHistory2(int p, int p1, int p_game, char *End) +FindHistory2(int p, int p1, int p_game, char *End, const size_t End_size) { FILE *fpHist; + char fmt[80] = { '\0' }; int index = 0; long int when = 0; static char fileName[MAX_FILENAME_SIZE]; @@ -1009,12 +1012,11 @@ FindHistory2(int p, int p1, int p_game, char *End) return NULL; } - do { - int ret; + msnprintf(fmt, sizeof fmt, "%%d %%*c %%*d %%*c %%*d %%*s %%*s %%*d " + "%%*d %%*d %%*d %%*s %%%zus %%ld\n", (End_size - 1)); - ret = fscanf(fpHist, "%d %*c %*d %*c %*d %*s %*s %*d %*d %*d " - "%*d %*s %s %ld", &index, End, &when); - if (ret != 3) + do { + if (fscanf(fpHist, fmt, &index, End, &when) != 3) warn("%s: %s: corrupt", __func__, &fileName[0]); } while (!feof(fpHist) && index != p_game); @@ -1815,14 +1817,15 @@ jsave_history(int p, char save_spot, int p1, int from, char *to_file) char *EndSymbol; char *HistoryFname; char *name_to = parray[p].login; - char End[100]; - char command[MAX_FILENAME_SIZE * 2 + 3]; + char End[100] = { '\0' }; + char command[MAX_FILENAME_SIZE * 2 + 3] = { '\0' }; char filename[MAX_FILENAME_SIZE + 1] = { '\0' }; // XXX - char jfname[MAX_FILENAME_SIZE]; + char jfname[MAX_FILENAME_SIZE] = { '\0' }; char type[4]; int g; - if ((HistoryFname = FindHistory2(p, p1, from, End)) != NULL) { + if ((HistoryFname = FindHistory2(p, p1, from, End, sizeof End)) != + NULL) { if ((Game = fopen(HistoryFname, "r")) == NULL) { pprintf(p, "History game %d not available for %s.\n", from, diff --git a/FICS/playerdb.c b/FICS/playerdb.c index f84dfe4..5888078 100644 --- a/FICS/playerdb.c +++ b/FICS/playerdb.c @@ -75,6 +75,21 @@ player_num_ok_chk(const int num) num < (int)ARRAY_SIZE(parray)); } +PUBLIC void +xrename(const char *fn, const char *name1, const char *name2) +{ + if (fn == NULL || name1 == NULL || name2 == NULL) { + errno = EINVAL; + warn("%s", __func__); + return; + } + + errno = 0; + + if (rename(name1, name2) != 0) + warn("%s: '%s' -> '%s'", fn, name1, name2); +} + PRIVATE int get_empty_slot(void) { @@ -1104,7 +1119,7 @@ player_markdeleted(int p) parray[p].login[0], parray[p].login); snprintf(fname2, sizeof fname2, "%s/%c/%s.delete", player_dir, parray[p].login[0], parray[p].login); - rename(fname, fname2); + xrename(__func__, fname, fname2); if ((fp = fopen(fname2, "a")) != NULL) { // Touch the file fprintf(fp, "\n"); @@ -2886,7 +2901,7 @@ player_kill(char *name) name); snprintf(fname2, sizeof fname2, "%s/%c/.rem.%s", player_dir, name[0], name); - rename(fname, fname2); + xrename(__func__, fname, fname2); RemHist(name); @@ -2894,25 +2909,25 @@ player_kill(char *name) stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.games", stats_dir, name[0], name); - rename(fname, fname2); + xrename(__func__, fname, fname2); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.comments", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.comments", stats_dir, name[0], name); - rename(fname, fname2); + xrename(__func__, fname, fname2); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.logons", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.logons", stats_dir, name[0], name); - rename(fname, fname2); + xrename(__func__, fname, fname2); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.messages", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.messages", stats_dir, name[0], name); - rename(fname, fname2); + xrename(__func__, fname, fname2); return 0; } @@ -2927,31 +2942,31 @@ player_rename(char *name, char *newname) name); snprintf(fname2, sizeof fname2, "%s/%c/%s", player_dir, newname[0], newname); - rename(fname, fname2); + xrename(__func__, fname, fname2); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.games", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/%s.games", stats_dir, newname[0], newname); - rename(fname, fname2); + xrename(__func__, fname, fname2); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.comments", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/%s.comments", stats_dir, newname[0], newname); - rename(fname, fname2); + xrename(__func__, fname, fname2); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.logons", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/%s.logons", stats_dir, newname[0], newname); - rename(fname, fname2); + xrename(__func__, fname, fname2); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.messages", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/%s.messages", stats_dir, newname[0], newname); - rename(fname, fname2); + xrename(__func__, fname, fname2); return 0; } @@ -2966,31 +2981,31 @@ player_raise(char *name) name[0], name); snprintf(fname2, sizeof fname2, "%s/%c/.rem.%s", player_dir, name[0], name); - rename(fname2, fname); + xrename(__func__, fname2, fname); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.games", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.games", stats_dir, name[0], name); - rename(fname2, fname); + xrename(__func__, fname2, fname); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.comments", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.comments", stats_dir, name[0], name); - rename(fname2, fname); + xrename(__func__, fname2, fname); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.logons", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.logons", stats_dir, name[0], name); - rename(fname2, fname); + xrename(__func__, fname2, fname); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.messages", stats_dir, name[0], name); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.messages", stats_dir, name[0], name); - rename(fname2, fname); + xrename(__func__, fname2, fname); return 0; } @@ -3005,31 +3020,31 @@ player_reincarn(char *name, char *newname) newname[0], newname); snprintf(fname2, sizeof fname2, "%s/%c/.rem.%s", player_dir, name[0], name); - rename(fname2, fname); + xrename(__func__, fname2, fname); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.games", stats_dir, newname[0], newname); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.games", stats_dir, name[0], name); - rename(fname2, fname); + xrename(__func__, fname2, fname); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.comments", stats_dir, newname[0], newname); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.comments", stats_dir, name[0], name); - rename(fname2, fname); + xrename(__func__, fname2, fname); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.logons", stats_dir, newname[0], newname); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.logons", stats_dir, name[0], name); - rename(fname2, fname); + xrename(__func__, fname2, fname); snprintf(fname, sizeof fname, "%s/player_data/%c/%s.messages", stats_dir, newname[0], newname); snprintf(fname2, sizeof fname2, "%s/player_data/%c/.rem.%s.messages", stats_dir, name[0], name); - rename(fname2, fname); + xrename(__func__, fname2, fname); return 0; } diff --git a/FICS/playerdb.h b/FICS/playerdb.h index dc5d6cc..1ccae61 100644 --- a/FICS/playerdb.h +++ b/FICS/playerdb.h @@ -204,6 +204,7 @@ extern player parray[PARRAY_SIZE]; extern int p_num; extern bool player_num_ok_chk(const int); +extern void xrename(const char *, const char *, const char *); extern int ClearMsgsBySender(int, param_list); extern int ClrMsgRange(int, int, int); |