diff options
Diffstat (limited to 'source/a/ncompress/ncompress.filenamelen.diff')
-rw-r--r-- | source/a/ncompress/ncompress.filenamelen.diff | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/source/a/ncompress/ncompress.filenamelen.diff b/source/a/ncompress/ncompress.filenamelen.diff new file mode 100644 index 00000000..67676c7a --- /dev/null +++ b/source/a/ncompress/ncompress.filenamelen.diff @@ -0,0 +1,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() + { |