--- hiscore.c.orig Sun May 5 04:09:25 1996 +++ hiscore.c Tue Jul 11 21:29:01 2000 @@ -5,14 +5,16 @@ * Copyleft (c) 1994-1996 Software Research Academy * ************************************************************************/ #include -#include -#include +#include +#include +#include +#include #include "config.h" #include "hiscore.h" static struct Hiscore hiscore[4]; -static char *lockf = LOCK_FILE; +static char *lockfn = LOCK_FILE; static char *hiscoref = HISCORE_FILE; extern char *same_dir; static int lock_file( @@ -30,12 +32,15 @@ FILE *fp; int i, j; char *myname; - char tmpf[256]; + char tmpf[MAXPATHLEN]; int new = 0; myname = (char *)getenv("LOGNAME"); - sprintf(tmpf, "%s/%s", same_dir, hiscoref); - umask(0); + if (MAXPATHLEN <= snprintf(tmpf, MAXPATHLEN ,"%s/%s", same_dir, hiscoref) ) { + fprintf(stderr,"Error: hiscore file name too long.\n"); + return -1; + } + umask(002); fp = fopen(tmpf,"rb"); if(fp != NULL) { @@ -75,11 +80,11 @@ break; } } - if(i < 10 | new == 1) + if(i < 10 || new == 1) { if(lock_file(0) != 0) return(-1); - umask(0); + umask(002); fp = fopen(tmpf, "wb"); fwrite(hiscore, sizeof(hiscore), 1, fp); fclose(fp); @@ -95,10 +100,12 @@ int cmd; { FILE *fp; - char lkf[256]; + char lkf[MAXPATHLEN]; int i; - - sprintf(lkf,"%s/%s", same_dir, lockf); + if (MAXPATHLEN <= snprintf(lkf, MAXPATHLEN, "%s/%s", same_dir, lockfn)) { + fprintf(stderr,"Error: lock file name too long.\n"); + return -1; + } if(cmd == 1) { if(remove(lkf) != 0) @@ -134,9 +141,12 @@ struct Hiscore *hi; { FILE *fp; - char tmpf[256]; + char tmpf[MAXPATHLEN]; - sprintf(tmpf, "%s/%s", same_dir, hiscoref); + if (MAXPATHLEN <= snprintf(tmpf, MAXPATHLEN, "%s/%s", same_dir, hiscoref)) { + fprintf(stderr,"Error: hiscore file name too long.\n"); + return -1; + } fp = fopen(tmpf,"rb"); if(fp == NULL) return(-1);