summaryrefslogtreecommitdiffstats
path: root/source/a/ncompress/ncompress.filenamelen.diff
blob: 67676c7a8e8572356a925d23daeedc39a8e2e991 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
--- ncompress-4.2.4/compress42.c.filenamelen	Wed Nov 21 12:19:38 2001
+++ ncompress-4.2.4/compress42.c	Wed Nov 21 12:20:03 2001
@@ -140,6 +140,7 @@
 #include	<sys/types.h>
 #include	<sys/stat.h>
 #include	<errno.h>
+#include        <string.h>
 
 #ifdef DIRENT
 #	include	<dirent.h>
@@ -213,7 +214,7 @@
 #	define	OBUFSIZ	BUFSIZ	/* Default output buffer size							*/
 #endif
 
-#define MAXPATHLEN 1024		/* MAXPATHLEN - maximum length of a pathname we allow 	*/
+#define MAXPATHLEN PATH_MAX 		/* MAXPATHLEN - maximum length of a pathname we allow 	*/
 #define	SIZE_INNER_LOOP		256	/* Size of the inter (fast) compress loop			*/
 
 							/* Defines for third byte of header 					*/
@@ -641,13 +642,11 @@
 	} ;
 #endif
 
-void  	main			ARGS((int,char **));
 void  	Usage			ARGS((void));
 void  	comprexx		ARGS((char **));
 void  	compdir			ARGS((char *));
 void  	compress		ARGS((int,int));
 void  	decompress		ARGS((int,int));
-char  	*rindex			ARGS((char *,int));
 void  	read_error		ARGS((void));
 void  	write_error		ARGS((void));
 void 	abort_compress	ARGS((void));
@@ -694,13 +693,15 @@
  *   deterministic, and can be done on the fly.  Thus, the decompression
  *   procedure needs no input table, but tracks the way the table was built.
  */ 
-void
+int
 main(argc, argv)
 	REG1	int 	 argc;
 	REG2	char	*argv[];
 	{
     	REG3	char		**filelist;
 		REG4	char		**fileptr;
+                int i;
+                
 
     	if (fgnd_flag = (signal(SIGINT, SIG_IGN) != SIG_IGN))
 			signal(SIGINT, (SIG_TYPE)abort_compress);
@@ -714,7 +715,14 @@
     	nomagic = 1;	/* Original didn't have a magic number */
 #endif
 
-    	filelist = fileptr = (char **)malloc(argc*sizeof(char *));
+        for(i=0;i<argc;i++){
+            if(strlen(argv[i])>(MAXPATHLEN-1)){
+                fprintf(stderr,"Filename too long\n");
+                exit(1);
+            }
+        }
+
+        filelist = fileptr = (char **)malloc(argc*sizeof(char *));
     	*filelist = NULL;
 
     	if((progname = rindex(argv[0], '/')) != 0)
@@ -853,8 +861,9 @@
 			else
 				decompress(0, 1);
 		}
-
+        
 		exit((exit_code== -1) ? 1:exit_code);
+                return 0;
 	}
 
 void
@@ -1801,20 +1810,6 @@
 			write_error();
 	}
 
-char *
-rindex(s, c)		/* For those who don't have it in libc.a */
-	REG1 char	*s;
-	REG2 int	 c;
-	{
-		char *p;
-
-		for (p = NULL; *s; s++)
-		    if (*s == (char)c)
-				p = s;
-
-		return(p);
-	}
-
 void
 read_error()
 	{