cvsdist 9740fe3
--- ncompress-4.2.4/compress42.c.filenamelen	Wed Nov 21 12:19:38 2001
cvsdist 9740fe3
+++ ncompress-4.2.4/compress42.c	Wed Nov 21 12:20:03 2001
cvsdist 9740fe3
@@ -140,6 +140,7 @@
cvsdist 9740fe3
 #include	<sys/types.h>
cvsdist 9740fe3
 #include	<sys/stat.h>
cvsdist 9740fe3
 #include	<errno.h>
cvsdist 9740fe3
+#include        <string.h>
cvsdist 9740fe3
 
cvsdist 9740fe3
 #ifdef DIRENT
cvsdist 9740fe3
 #	include	<dirent.h>
cvsdist 9740fe3
@@ -213,7 +214,7 @@
cvsdist 9740fe3
 #	define	OBUFSIZ	BUFSIZ	/* Default output buffer size							*/
cvsdist 9740fe3
 #endif
cvsdist 9740fe3
 
cvsdist 9740fe3
-#define MAXPATHLEN 1024		/* MAXPATHLEN - maximum length of a pathname we allow 	*/
cvsdist 9740fe3
+#define MAXPATHLEN PATH_MAX 		/* MAXPATHLEN - maximum length of a pathname we allow 	*/
cvsdist 9740fe3
 #define	SIZE_INNER_LOOP		256	/* Size of the inter (fast) compress loop			*/
cvsdist 9740fe3
 
cvsdist 9740fe3
 							/* Defines for third byte of header 					*/
cvsdist 9740fe3
@@ -641,13 +642,11 @@
cvsdist 9740fe3
 	} ;
cvsdist 9740fe3
 #endif
cvsdist 9740fe3
 
cvsdist 9740fe3
-void  	main			ARGS((int,char **));
cvsdist 9740fe3
 void  	Usage			ARGS((void));
cvsdist 9740fe3
 void  	comprexx		ARGS((char **));
cvsdist 9740fe3
 void  	compdir			ARGS((char *));
cvsdist 9740fe3
 void  	compress		ARGS((int,int));
cvsdist 9740fe3
 void  	decompress		ARGS((int,int));
cvsdist 9740fe3
-char  	*rindex			ARGS((char *,int));
cvsdist 9740fe3
 void  	read_error		ARGS((void));
cvsdist 9740fe3
 void  	write_error		ARGS((void));
cvsdist 9740fe3
 void 	abort_compress	ARGS((void));
cvsdist 9740fe3
@@ -694,13 +693,15 @@
cvsdist 9740fe3
  *   deterministic, and can be done on the fly.  Thus, the decompression
cvsdist 9740fe3
  *   procedure needs no input table, but tracks the way the table was built.
cvsdist 9740fe3
  */ 
cvsdist 9740fe3
-void
cvsdist 9740fe3
+int
cvsdist 9740fe3
 main(argc, argv)
cvsdist 9740fe3
 	REG1	int 	 argc;
cvsdist 9740fe3
 	REG2	char	*argv[];
cvsdist 9740fe3
 	{
cvsdist 9740fe3
     	REG3	char		**filelist;
cvsdist 9740fe3
 		REG4	char		**fileptr;
cvsdist 9740fe3
+                int i;
cvsdist 9740fe3
+                
cvsdist 9740fe3
 
cvsdist 9740fe3
     	if (fgnd_flag = (signal(SIGINT, SIG_IGN) != SIG_IGN))
cvsdist 9740fe3
 			signal(SIGINT, (SIG_TYPE)abort_compress);
cvsdist 9740fe3
@@ -714,7 +715,14 @@
cvsdist 9740fe3
     	nomagic = 1;	/* Original didn't have a magic number */
cvsdist 9740fe3
 #endif
cvsdist 9740fe3
 
cvsdist 9740fe3
-    	filelist = fileptr = (char **)malloc(argc*sizeof(char *));
cvsdist 9740fe3
+        for(i=0;i
cvsdist 9740fe3
+            if(strlen(argv[i])>(MAXPATHLEN-1)){
cvsdist 9740fe3
+                fprintf(stderr,"Filename too long\n");
cvsdist 9740fe3
+                exit(1);
cvsdist 9740fe3
+            }
cvsdist 9740fe3
+        }
cvsdist 9740fe3
+
cvsdist 9740fe3
+        filelist = fileptr = (char **)malloc(argc*sizeof(char *));
cvsdist 9740fe3
     	*filelist = NULL;
cvsdist 9740fe3
 
cvsdist 9740fe3
     	if((progname = rindex(argv[0], '/')) != 0)
cvsdist 9740fe3
@@ -853,8 +861,9 @@
cvsdist 9740fe3
 			else
cvsdist 9740fe3
 				decompress(0, 1);
cvsdist 9740fe3
 		}
cvsdist 9740fe3
-
cvsdist 9740fe3
+        
cvsdist 9740fe3
 		exit((exit_code== -1) ? 1:exit_code);
cvsdist 9740fe3
+                return 0;
cvsdist 9740fe3
 	}
cvsdist 9740fe3
 
cvsdist 9740fe3
 void
cvsdist 9740fe3
@@ -1801,20 +1810,6 @@
cvsdist 9740fe3
 			write_error();
cvsdist 9740fe3
 	}
cvsdist 9740fe3
 
cvsdist 9740fe3
-char *
cvsdist 9740fe3
-rindex(s, c)		/* For those who don't have it in libc.a */
cvsdist 9740fe3
-	REG1 char	*s;
cvsdist 9740fe3
-	REG2 int	 c;
cvsdist 9740fe3
-	{
cvsdist 9740fe3
-		char *p;
cvsdist 9740fe3
-
cvsdist 9740fe3
-		for (p = NULL; *s; s++)
cvsdist 9740fe3
-		    if (*s == (char)c)
cvsdist 9740fe3
-				p = s;
cvsdist 9740fe3
-
cvsdist 9740fe3
-		return(p);
cvsdist 9740fe3
-	}
cvsdist 9740fe3
-
cvsdist 9740fe3
 void
cvsdist 9740fe3
 read_error()
cvsdist 9740fe3
 	{