--- ../../work-old/sxsame-3.02/hiscore.c	Mon Nov  1 01:17:43 1999
+++ hiscore.c	Mon Nov  1 00:24:36 1999
@@ -8,8 +8,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
+#include <sys/param.h>
 #include "config.h"
 #include "hiscore.h"
 
@@ -33,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)
 	{
@@ -82,7 +84,7 @@
 		{
 			if(lock_file(0) != 0)
 				return(-1);
-			umask(0);
+			umask(002);
 			fp = fopen(tmpf, "wb");
 			fwrite(hiscore, sizeof(hiscore), 1, fp);
 			fclose(fp);
@@ -98,10 +100,13 @@
 int cmd;
 {
 	FILE *fp;
-	char lkf[256];
+	char lkf[MAXPATHLEN];
 	int i;
 
-	sprintf(lkf,"%s/%s", same_dir, lockfn);
+	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)
@@ -137,9 +142,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);
--- ../../work-old/sxsame-3.02/loadbmp.c	Mon Nov  1 01:17:43 1999
+++ loadbmp.c	Mon Nov  1 01:38:08 1999
@@ -7,6 +7,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/param.h>
 #include <X11/Xlib.h>
 #include "sxsame.h"
 
@@ -39,17 +40,24 @@
 	int c, c1,c2;
 	int width, height, planes, ncol;
 	int *col;
-	char fname[256];
+	char fname[MAXPATHLEN];
 
 	Pixmap w;
 	GC gc;
 	int i, j, k;
 
+	if (MAXPATHLEN <= strlen(bmpname) ) {
+		fprintf(stderr,"Error: BMP file name too long.\n");
+		return -1;
+	}
 	strcpy(fname,bmpname);
 	fp = fopen(fname,"rb");
 	if(fp == NULL)
 	{
-		sprintf(fname, "%s/%s", SAME_DIR, bmpname);
+		if (MAXPATHLEN <= snprintf(fname, MAXPATHLEN, "%s/%s", SAME_DIR, bmpname)) {
+			fprintf(stderr,"Error: BMP file name too long.\n");
+			return -1;
+		}
 		fp = fopen(fname, "r");
 		if(fp == NULL)
 		{
--- ../../work-old/sxsame-3.02/loaddata.c	Mon Nov  1 01:17:43 1999
+++ loaddata.c	Mon Nov  1 01:35:49 1999
@@ -7,6 +7,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <sys/param.h>
 #include "config.h"
 #include "sxsame.h"
 
@@ -27,7 +28,7 @@
 DataFile ***data;
 {
 	FILE *fp;
-	char fname[256];
+	char fname[MAXPATHLEN];
 	char buf[256];
 	char str1[256];
 	char str2[256];
@@ -36,11 +37,18 @@
 	char *p;
 	int i;
 
+	if (MAXPATHLEN <= strlen(entry_name)) {
+		fprintf(stderr,"Error: data file name too long.\n");
+		return 0;
+	}
 	strcpy(fname,entry_name);
 	fp = fopen(fname, "r");
 	if(fp == NULL)
 	{
-		sprintf(fname, "%s/%s", SAME_DIR, entry_name);
+		if (MAXPATHLEN <= snprintf(fname, MAXPATHLEN ,"%s/%s", SAME_DIR, entry_name)) {
+			fprintf(stderr,"Error: data file name too long.\n");
+			return 0;
+		}
 		fp = fopen(fname, "r");
 		if(fp == NULL)
 			return(0);
@@ -83,7 +91,7 @@
 char *fname;
 {
 	FILE *fp;
-	char tmpfname[256];
+	char tmpfname[MAXPATHLEN];
 	char buf[256];
 	char str1[256],str2[256];
 	int val, i, j;
@@ -105,7 +113,10 @@
 	fp = fopen(fname,"r");
 	if(fp == NULL)
 	{
-		sprintf(tmpfname, "%s/%s", SAME_DIR, fname);
+		if (MAXPATHLEN <= snprintf(tmpfname, MAXPATHLEN, "%s/%s", SAME_DIR, fname)) {
+			fprintf(stderr,"Error: data file name too long.\n", fname);
+			return -1;
+		}
 		fp = fopen(tmpfname, "r");
 		if(fp == NULL)
 		{
--- ../../work-old/sxsame-3.02/sxsame.c	Mon Nov  1 01:17:44 1999
+++ sxsame.c	Mon Nov  1 01:32:18 1999
@@ -16,6 +16,7 @@
 #include <unistd.h>
 #include <time.h>
 #include <string.h>
+#include <sys/param.h>
 #include <X11/Xlib.h>
 #include <X11/Xutil.h>
 #ifndef LOCAL_XPM_H
@@ -740,7 +741,7 @@
 {
 	ImportSameData data;
 	int i, j, val, ncol;
-	char tmpfname[256];
+	char tmpfname[MAXPATHLEN];
 
 	if(strlen(fname)>4) /* check Windows data file... */
 	{
@@ -798,9 +799,13 @@
 			{
 				if(!access(data.xpm_data[i][j]))
 					strcpy(tmpfname,data.xpm_data[i][j]);
-				else
-					sprintf(tmpfname,"%s/%s",same_dir,
-						data.xpm_data[i][j]);
+				else {
+					if (MAXPATHLEN <=
+						snprintf(tmpfname, MAXPATHLEN, "%s/%s",same_dir,
+						data.xpm_data[i][j])) {
+						goto xpm_error;
+					}
+				}
 				val = XpmReadFileToPixmap(dpy, root,
 					tmpfname, &game.bits_xpm[i][j],
 					NULL, &xpm_attr);
@@ -818,7 +823,9 @@
 	if(!access(data.bg_data))
 		strcpy(tmpfname,data.bg_data);
 	else
-		sprintf(tmpfname,"%s/%s",same_dir, data.bg_data);
+		if (MAXPATHLEN <= snprintf(tmpfname, MAXPATHLEN, "%s/%s",same_dir, data.bg_data)) {
+			goto xpm_error;
+		}
 	val = XpmReadFileToPixmap(dpy, root, tmpfname,
 			&game.bg_xpm, NULL, &xpm_attr);
 	free(data.bg_data);
@@ -828,7 +835,10 @@
 	if(!access(data.frame_data))
 		strcpy(tmpfname,data.frame_data);
 	else
-		sprintf(tmpfname,"%s/%s",same_dir, data.frame_data);
+		if (MAXPATHLEN <= snprintf(tmpfname, MAXPATHLEN, "%s/%s",same_dir, data.frame_data)) {
+			
+			goto xpm_error;
+		}
 	val = XpmReadFileToPixmap(dpy, root, tmpfname,
 			&game.frame_xpm, NULL, &xpm_attr);
 	free(data.frame_data);
