--- 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 #include #include +#include #ifdef DIRENT # include @@ -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(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() {