diff -ru mpack-1.6/common.h mpack-1.6.new/common.h --- mpack-1.6/common.h 2003-07-21 19:49:06.000000000 -0400 +++ mpack-1.6.new/common.h 2018-09-14 18:11:58.197469285 -0400 @@ -43,4 +43,26 @@ #ifndef HAVE_STRCHR #define strchr index #define strrchr rindex + +#else +#include "part.h" + +void os_perror(char *); +int encode(FILE *infile, FILE *applefile, char *fname, FILE *descfile, char *subject, char *headers, long int maxsize, char *typeoverride, char *outfname); +int to64(FILE *infile, FILE *outfile, long int limit); +int handleMultipart(struct part *inpart, char *contentType, params contentParams, int extractText); +int handleMessage(struct part *inpart, char *defaultContentType, int inAppleDouble, int extractText); +int handleUuencode(struct part *inpart, char *subject, int extractText); +void chat(char *str); + +void os_donewithdir(char *dir); +void os_warnMD5mismatch(void); +void os_closetypedfile(FILE *outfile); +int os_binhex(struct part *inpart, int part, int nparts); + +int parseSubject(char *subject, char **fnamep, int *partp, int *npartsp); +int saveUuFile(struct part *inpart, char *fname, int part, int nparts, char *firstline); +int descEnd(char *line); +int uudecodefiles(char *dir, int nparts); +void uudecodeline(char *line, FILE *outfile); #endif diff -ru mpack-1.6/decode.c mpack-1.6.new/decode.c --- mpack-1.6/decode.c 2003-07-21 16:47:54.000000000 -0400 +++ mpack-1.6.new/decode.c 2018-09-14 18:01:42.518631805 -0400 @@ -28,6 +28,9 @@ #include #include #include +#include +#include +#include #include "xmalloc.h" #include "common.h" #include "part.h" @@ -49,6 +52,12 @@ void from64(struct part *inpart, FILE *outfile, char **digestp, int suppressCR); void fromqp(struct part *inpart, FILE *outfile, char **digestp); void fromnone(struct part *inpart, FILE *outfile, char **digestp); + +static int handlePartial(struct part *inpart, char *headers, params contentParams, int extractText); +static int ignoreMessage(struct part *inpart); +static int handleText(struct part *inpart, enum encoding contentEncoding); +static int saveToFile(struct part *inpart, int inAppleDouble, char *contentType, params contentParams, enum encoding contentEncoding, char *contentDisposition, char *contentMD5); + /* * Read and handle an RFC 822 message from the body-part 'inpart'. */ diff -ru mpack-1.6/encode.c mpack-1.6.new/encode.c --- mpack-1.6/encode.c 2003-07-21 16:35:31.000000000 -0400 +++ mpack-1.6.new/encode.c 2018-09-14 17:41:08.054275377 -0400 @@ -24,6 +24,9 @@ */ #include #include +#include +#include +#include "common.h" extern char *magic_look(FILE *infile); extern char *os_genid(void); diff -ru mpack-1.6/macmpack.c mpack-1.6.new/macmpack.c --- mpack-1.6/macmpack.c 1995-02-16 16:39:45.000000000 -0500 +++ mpack-1.6.new/macmpack.c 2018-09-14 17:59:49.099714204 -0400 @@ -239,7 +239,7 @@ /* chat with user */ -chat(char *str) +void chat(char *str) { PCstr tmpstr[257]; diff -ru mpack-1.6/macos.c mpack-1.6.new/macos.c --- mpack-1.6/macos.c 2003-07-21 15:23:54.000000000 -0400 +++ mpack-1.6.new/macos.c 2018-09-14 18:06:11.447748498 -0400 @@ -204,8 +204,7 @@ * We are done with the directory returned by os_idtodir() * Remove it */ -os_donewithdir(dir) -char *dir; +void os_donewithdir(char dir) { PCstr buf[257]; short uqid; @@ -343,8 +342,7 @@ /* * Close a file opened by os_newTypedFile() */ -os_closetypedfile(outfile) -FILE *outfile; +void os_closetypedfile(FILE *outfile) { char buf[128]; @@ -365,7 +363,7 @@ * Warn user that the MD5 digest of the last file created by os_newtypedfile() * did not match that supplied in the Content-MD5: header. */ -os_warnMD5mismatch() +void os_warnMD5mismatch(void) { char *warning; diff -ru mpack-1.6/magic.c mpack-1.6.new/magic.c --- mpack-1.6/magic.c 2003-07-21 16:35:31.000000000 -0400 +++ mpack-1.6.new/magic.c 2018-09-14 17:43:49.684313535 -0400 @@ -23,6 +23,7 @@ * SOFTWARE. */ #include +#include /* Description of the various file formats and their magic numbers */ struct magic { Only in mpack-1.6.new: mpack.1 Only in mpack-1.6.new: munpack.1 diff -ru mpack-1.6/part.c mpack-1.6.new/part.c --- mpack-1.6/part.c 2003-07-21 16:35:31.000000000 -0400 +++ mpack-1.6.new/part.c 2018-09-14 18:12:33.772824677 -0400 @@ -28,6 +28,7 @@ #include #include +#include #include "part.h" #include "xmalloc.h" diff -ru mpack-1.6/part.h mpack-1.6.new/part.h --- mpack-1.6/part.h 2003-07-21 16:35:31.000000000 -0400 +++ mpack-1.6.new/part.h 2018-09-14 18:05:08.812881992 -0400 @@ -1,3 +1,5 @@ +#ifndef __part_H__ +#define __part_H__ /* * Read MIME body-part, stopping on boundaries. */ @@ -54,6 +56,13 @@ #define part_ungetc(c, s) ((s)->cnt++, ((s)->boundary_seen = (s)->boundary_num), (*--(s)->ptr = (c))) -extern struct part *part_init(FILE *infile); -extern char *part_gets(char *s, int n, struct part *part); +int part_fill(struct part *part); +int part_ungets(char *s, struct part *part); +struct part *part_init(FILE *infile); +char *part_gets(char *s, int n, struct part *part); +int part_depth(struct part *part); +int part_close(struct part *part); +int part_addboundary(struct part *part, char *boundary); +int part_readboundary(struct part *part); +#endif /* __part_H__ */ Only in mpack-1.6.new: root Only in mpack-1.6.new: tags diff -ru mpack-1.6/unixos.c mpack-1.6.new/unixos.c --- mpack-1.6/unixos.c 2003-07-21 16:54:05.000000000 -0400 +++ mpack-1.6.new/unixos.c 2018-09-14 17:29:24.583154415 -0400 @@ -30,6 +30,11 @@ #include #include #include +#include +#include +#include +#include +#include #include "xmalloc.h" #include "common.h" #include "part.h" @@ -39,7 +44,6 @@ #endif extern int errno; -extern char *malloc(); extern char *getenv(); int overwrite_files = 0; @@ -49,7 +53,8 @@ static char *output_fname = 0; /* Characters that shouldn't be in filenames */ -#define BADCHARS "!$&*()|\'\";<>[]{}?/`\\ \t" +#define BADCHARS "/" +#define SUBSTCHAR '_' /* Generate a message-id */ char *os_genid(void) @@ -75,7 +80,7 @@ } } - result = malloc(25+strlen(hostname)); + result = xmalloc(25+strlen(hostname)); sprintf(result, "%d.%d@%s", pid, curtime++, hostname); return result; } @@ -166,12 +171,6 @@ if (!fname) fname = ""; - /* If absolute path name, chop to tail */ - if (*fname == '/') { - p = strrchr(fname, '/'); - fname = p+1; - } - /* Get rid of leading ~ or ~/ */ while (*fname == '~' || *fname == '/') fname++; @@ -181,13 +180,13 @@ for (p=fname; *p; p++) { if (*p == '/') { if (!strncmp(p, "/../", 4)) { - p[1] = p[2] = 'X'; + p[1] = p[2] = SUBSTCHAR; } *p = '\0'; (void) mkdir(fname, 0777); *p = '/'; } - else if (!isprint(*p) || strchr(BADCHARS, *p)) *p = 'X'; + else if (!isprint(*p) || strchr(BADCHARS, *p)) *p = SUBSTCHAR; } if (!fname[0]) { diff -ru mpack-1.6/unixpk.c mpack-1.6.new/unixpk.c --- mpack-1.6/unixpk.c 2003-07-21 16:50:41.000000000 -0400 +++ mpack-1.6.new/unixpk.c 2018-09-14 17:43:07.581085162 -0400 @@ -25,6 +25,10 @@ #include #include #include +#include +#include +#include +#include #include "common.h" #include "version.h" #include "xmalloc.h" @@ -160,14 +164,25 @@ } if (!outfname) { + int fd; + if (getenv("TMPDIR")) { strcpy(fnamebuf, getenv("TMPDIR")); } else { - strcpy(fnamebuf, "/usr/tmp"); + strcpy(fnamebuf, "/tmp"); } strcat(fnamebuf, "/mpackXXXXXX"); - mktemp(fnamebuf); + if ((fd = mkstemp(fnamebuf)) == -1) { + os_perror(fnamebuf); + exit(1); + } + /* + ** mkstemp() creates/opens the file for us but this case expects + ** paths to be passed around. So just close it here. outfname + ** will be used later. + */ + close (fd); outfname = strsave(fnamebuf); } diff -ru mpack-1.6/unixunpk.c mpack-1.6.new/unixunpk.c --- mpack-1.6/unixunpk.c 2003-07-21 16:51:55.000000000 -0400 +++ mpack-1.6.new/unixunpk.c 2018-09-14 17:55:15.622733776 -0400 @@ -23,6 +23,9 @@ * SOFTWARE. */ #include +#include +#include +#include "common.h" #include "version.h" #include "part.h" diff -ru mpack-1.6/uudecode.c mpack-1.6.new/uudecode.c --- mpack-1.6/uudecode.c 2003-07-21 16:46:37.000000000 -0400 +++ mpack-1.6.new/uudecode.c 2018-09-14 18:11:31.387955015 -0400 @@ -25,6 +25,8 @@ #include #include #include +#include +#include #include "xmalloc.h" #include "common.h" #include "part.h" @@ -826,7 +828,7 @@ /* * Decode a uuencoded line to 'outfile' */ -int uudecodeline(char *line, FILE *outfile) +void uudecodeline(char *line, FILE *outfile) { int c, len; diff -ru mpack-1.6/xmalloc.c mpack-1.6.new/xmalloc.c --- mpack-1.6/xmalloc.c 2003-07-21 16:35:31.000000000 -0400 +++ mpack-1.6.new/xmalloc.c 2018-09-14 13:17:28.574643725 -0400 @@ -24,7 +24,7 @@ */ #include #include -extern char *malloc(), *realloc(); +#include char *xmalloc (int size) {