| --- mpack-1.5.orig/decode.c |
| +++ mpack-1.5/decode.c |
| @@ -466,6 +466,7 @@ |
| while (*from && *from != '\"') { |
| if (!--left) { |
| alloced += VALUEGROWSIZE; |
| + left += VALUEGROWSIZE; |
| value = xrealloc(value, alloced); |
| to = value + alloced - left - 2; |
| } |
| @@ -482,6 +483,7 @@ |
| while (*from && !isspace(*from)) { |
| if (!--left) { |
| alloced += VALUEGROWSIZE; |
| + left += VALUEGROWSIZE; |
| value = xrealloc(value, alloced); |
| to = value + alloced - left - 2; |
| } |
| @@ -571,6 +573,7 @@ |
| while (*disposition && *disposition != '\"') { |
| if (!--left) { |
| alloced += VALUEGROWSIZE; |
| + left += VALUEGROWSIZE; |
| value = xrealloc(value, alloced); |
| to = value + alloced - left - 2; |
| } |
| @@ -588,6 +591,7 @@ |
| *disposition != '(') { |
| if (!--left) { |
| alloced += VALUEGROWSIZE; |
| + left += VALUEGROWSIZE; |
| value = xrealloc(value, alloced); |
| to = value + alloced - left - 2; |
| } |
| --- mpack-1.5.orig/unixos.c |
| +++ mpack-1.5/unixos.c |
| @@ -89,7 +89,7 @@ |
| strcpy(buf, getenv("TMPDIR")); |
| } |
| else { |
| - strcpy(buf, "/usr/tmp"); |
| + strcpy(buf, "/var/tmp"); |
| } |
| strcat(buf, "/m-prts-"); |
| p = getenv("USER"); |
| @@ -159,6 +159,11 @@ |
| |
| /* Get rid of leading ~ or ~/ */ |
| while (*fname == '~' || *fname == '/') fname++; |
| + |
| + /* Debian fix: the loop below handles internal "/../" but not |
| + * leading "../" */ |
| + /* Get rid of leading "../" */ |
| + while (!strncmp(fname, "../", 3)) fname += 3; |
| |
| /* Clean out bad characters, create directories along path */ |
| for (p=fname; *p; p++) { |
| --- mpack-1.5.orig/unixunpk.man |
| +++ mpack-1.5/unixunpk.man |
| @@ -107,7 +107,7 @@ |
| .SH ENVIRONMENT |
| .TP |
| .B TMPDIR |
| -Directory to store temporary files. Default is /usr/tmp. |
| +Directory to store temporary files. Default is /var/tmp. |
| .SH FILES |
| .TP |
| .B $TMPDIR/m-prts-$USER/ |
| --- mpack-1.5.orig/uudecode.c |
| +++ mpack-1.5/uudecode.c |
| @@ -524,8 +524,9 @@ |
| * representation syntax |
| */ |
| do { |
| - while (*scan != '\n' && isprint(*scan) |
| - && !isalnum(*scan) && *scan != '_') ++scan; |
| + /* Debian patch: skip non-printable characters too. |
| + * Sent upstream, no reply yet. */ |
| + while (*scan != '\n' && !isalnum(*scan) && *scan != '_') ++scan; |
| *fnamep = start = scan; |
| while (isalnum(*scan) || *scan == '-' || *scan == '+' || *scan == '&' |
| || *scan == '_' || *scan == '.') { |