diff -Nrup xli-2005-02-27/imagetypes.c xli-2005-02-27/imagetypes.c
--- xli-2005-02-27/imagetypes.c	1999-10-24 22:14:57.000000000 -0400
+++ xli-2005-02-27/imagetypes.c	2005-10-18 07:53:46.000000000 -0400
@@ -53,7 +53,7 @@ Image *loadImage(ImageOptions * image_op
 	Image *image;
 	int a;
 
-	if (findImage(image_ops->name, fullname) < 0) {
+	if (findImage(image_ops->name, fullname, BUFSIZ) < 0) {
 		if (errno == ENOENT)
 			printf("%s: image not found\n", image_ops->name);
 		else if (errno == EISDIR)
@@ -95,7 +95,7 @@ void identifyImage(char *name)
 	char fullname[BUFSIZ];
 	int a;
 
-	if (findImage(name, fullname) < 0) {
+	if (findImage(name, fullname, BUFSIZ) < 0) {
 		if (errno == ENOENT)
 			printf("%s: image not found\n", name);
 		else if (errno == EISDIR)
diff -Nrup xli-2005-02-27/path.c xli-2005-02-27/path.c
--- xli-2005-02-27/path.c	2005-02-27 19:42:39.000000000 -0500
+++ xli-2005-02-27/path.c	2005-10-18 07:56:45.000000000 -0400
@@ -172,12 +172,12 @@ static int fileIsOk(char *fullname, stru
 /* find an image with paths and extensions from defaults files.  returns
  * -1 if access denied or not found, 0 if ok.
  */
-int findImage(char *name, char *fullname)
+int findImage(char *name, char *fullname, size_t size)
 {
 	unsigned int p, e;
 	struct stat sbuf;
 
-	strcpy(fullname, name);
+	strncpy(fullname, name, size);
 	if (!strcmp(name, "stdin"))	/* stdin is special name */
 		return (0);
 
@@ -185,26 +185,26 @@ int findImage(char *name, char *fullname
 	if (!stat(fullname, &sbuf))
 		return (fileIsOk(fullname, &sbuf));
 #ifndef NO_COMPRESS
-	strcat(fullname, ".Z");
+	strncat(fullname, ".Z", size);
 	if (!stat(fullname, &sbuf))
 		return (fileIsOk(fullname, &sbuf));
 #endif
 
 	for (p = 0; p < NumPaths; p++) {
-		sprintf(fullname, "%s/%s", Paths[p], name);
+		snprintf(fullname, size, "%s/%s", Paths[p], name);
 		if (!stat(fullname, &sbuf))
 			return (fileIsOk(fullname, &sbuf));
 #ifndef NO_COMPRESS
-		strcat(fullname, ".Z");
+		strncat(fullname, ".Z", size);
 		if (!stat(fullname, &sbuf))
 #endif
 			return (fileIsOk(fullname, &sbuf));
 		for (e = 0; e < NumExts; e++) {
-			sprintf(fullname, "%s/%s%s", Paths[p], name, Exts[e]);
+			snprintf(fullname, size, "%s/%s%s", Paths[p], name, Exts[e]);
 			if (!stat(fullname, &sbuf))
 				return (fileIsOk(fullname, &sbuf));
 #ifndef NO_COMPRESS
-			strcat(fullname, ".Z");
+			strncat(fullname, ".Z", size);
 			if (!stat(fullname, &sbuf))
 				return (fileIsOk(fullname, &sbuf));
 #endif
@@ -212,11 +212,11 @@ int findImage(char *name, char *fullname
 	}
 
 	for (e = 0; e < NumExts; e++) {
-		sprintf(fullname, "%s%s", name, Exts[e]);
+		snprintf(fullname, size, "%s%s", name, Exts[e]);
 		if (!stat(fullname, &sbuf))
 			return (fileIsOk(fullname, &sbuf));
 #ifndef NO_COMPRESS
-		strcat(fullname, ".Z");
+		strncat(fullname, ".Z", size);
 		if (!stat(fullname, &sbuf))
 			return (fileIsOk(fullname, &sbuf));
 #endif
@@ -241,7 +241,7 @@ void listImages(void)
 	for (a = 0; a < NumPaths; a++) {
 		printf("%s:\n", Paths[a]);
 		fflush(stdout);
-		sprintf(buf, "ls %s", Paths[a]);
+		snprintf(buf, sizeof(buf)-1, "ls %s", Paths[a]);
 		if (system(buf) < 0) {
 			perror("ls");
 			return;
@@ -296,14 +296,14 @@ char *expandPath(char *p)
 			var++;
 		else if (*p == '~') {
 			buf1[b1] = '\0';
-			strcat(buf1, getenv("HOME"));
+			strncat(buf1, getenv("HOME"), sizeof(buf1)-1);
 			b1 = strlen(buf1);
 			var = 0;
 		} else if (*p == '/' || *p == '}') {
 			if (var) {
 				buf1[b1] = '\0';
 				buf2[b2] = '\0';
-				strcat(buf1, getenv(buf2));
+				strncat(buf1, getenv(buf2), sizeof(buf1));
 				b1 = strlen(buf1);
 				buf2[0] = '\0';
 				b2 = 0;
diff -Nrup xli-2005-02-27/reduce.c xli-2005-02-27/reduce.c
--- xli-2005-02-27/reduce.c	1999-10-24 22:15:02.000000000 -0400
+++ xli-2005-02-27/reduce.c	2005-10-18 07:33:34.000000000 -0400
@@ -178,7 +178,7 @@ Image *reduce(Image *image, unsigned col
 	/* get destination image */
 	depth = colorsToDepth(OutColors);
 	new_image = newRGBImage(image->width, image->height, depth);
-	sprintf(buf, "%s (%d colors)", image->title, OutColors);
+	snprintf(buf, sizeof(buf)-1, "%s (%d colors)", image->title, OutColors);
 	new_image->title = dupString(buf);
 	new_image->gamma = image->gamma;
 
diff -Nrup xli-2005-02-27/rlelib.c xli-2005-02-27/rlelib.c
--- xli-2005-02-27/rlelib.c	2005-10-18 07:40:51.000000000 -0400
+++ xli-2005-02-27/rlelib.c	2005-10-18 07:48:12.000000000 -0400
@@ -18,7 +18,7 @@
 #undef  DEBUG
 
 #ifdef DEBUG
-# define debug(xx)	fprintf(stderr,xx)
+# define debug(xx)	fprintf(stderr, "%s", xx)
 #else
 # define debug(xx)
 #endif
Files xli-2005-02-27/xli and xli-2005-02-27/xli differ
diff -Nrup xli-2005-02-27/xli.h xli-2005-02-27/xli.h
--- xli-2005-02-27/xli.h	1999-10-24 22:15:07.000000000 -0400
+++ xli-2005-02-27/xli.h	2005-10-19 07:49:21.000000000 -0400
@@ -229,7 +229,7 @@ char *xlistrstr(char *s1, char *s2);
 
 /* path.c */
 char *expandPath(char *p);
-int findImage(char *name, char *fullname);
+int findImage(char *name, char *fullname, size_t size);
 void listImages(void);
 void loadPathsAndExts(void);
 void showPath(void);
diff -Nrup xli-2005-02-27/xlito.c xli-2005-02-27/xlito.c
--- xli-2005-02-27/xlito.c	2005-02-27 19:42:39.000000000 -0500
+++ xli-2005-02-27/xlito.c	2005-10-18 07:48:54.000000000 -0400
@@ -31,7 +31,7 @@ char *pname, *fname;
 #undef  DEBUG
 
 #ifdef DEBUG
-# define debug(xx)	fprintf(stderr,xx)
+# define debug(xx)	fprintf(stderr, "%s", xx)
 #else
 # define debug(xx)
 #endif
diff -Nrup xli-2005-02-27/zoom.c xli-2005-02-27/zoom.c
--- xli-2005-02-27/zoom.c	2005-02-27 19:42:39.000000000 -0500
+++ xli-2005-02-27/zoom.c	2005-10-18 07:35:42.000000000 -0400
@@ -52,30 +52,30 @@ Image *zoom(Image *oimage, unsigned int 
     if (verbose)
       printf("  Zooming image Y axis by %d%%...", yzoom);
     if (changetitle)
-      sprintf(buf, "%s (Y zoom %d%%)", oimage->title, yzoom);
+      snprintf(buf, sizeof(buf)-1, "%s (Y zoom %d%%)", oimage->title, yzoom);
   }
   else if (!yzoom) {
     if (verbose)
       printf("  Zooming image X axis by %d%%...", xzoom);
     if (changetitle)
-      sprintf(buf, "%s (X zoom %d%%)", oimage->title, xzoom);
+      snprintf(buf, sizeof(buf)-1, "%s (X zoom %d%%)", oimage->title, xzoom);
   }
   else if (xzoom == yzoom) {
     if (verbose)
       printf("  Zooming image by %d%%...", xzoom);
     if (changetitle)
-      sprintf(buf, "%s (%d%% zoom)", oimage->title, xzoom);
+      snprintf(buf, sizeof(buf)-1, "%s (%d%% zoom)", oimage->title, xzoom);
   }
   else {
     if (verbose)
       printf("  Zooming image X axis by %d%% and Y axis by %d%%...",
 	     xzoom, yzoom);
     if (changetitle)
-      sprintf(buf, "%s (X zoom %d%% Y zoom %d%%)", oimage->title,
+      snprintf(buf, sizeof(buf)-1, "%s (X zoom %d%% Y zoom %d%%)", oimage->title,
 	    xzoom, yzoom);
   }
   if (!changetitle)
-    strcpy(buf,oimage->title);
+    strncpy(buf,oimage->title, sizeof(buf)-1);
 
   if (verbose)
     fflush(stdout);
