Ignore wrong encoding in multipart/*
[mmh] / uip / mhparse.c
index 0fbe33f..7a15b75 100644 (file)
@@ -8,12 +8,16 @@
 
 #include <h/mh.h>
 #include <fcntl.h>
-#include <h/signals.h>
+#include <signal.h>
 #include <errno.h>
 #include <h/tws.h>
 #include <h/mime.h>
 #include <h/mhparse.h>
 #include <h/utils.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <sys/stat.h>
+#include <sysexits.h>
 
 extern int debugsw;
 
@@ -135,7 +139,7 @@ pidcheck(int status)
 
        fflush(stdout);
        fflush(stderr);
-       exit(1);
+       exit(EX_SOFTWARE);
        return 1;
 }
 
@@ -235,7 +239,7 @@ get_content(FILE *in, char *file, int toplevel)
 
        /* allocate the content structure */
        if (!(ct = (CT) calloc(1, sizeof(*ct))))
-               adios(NULL, "out of memory");
+               adios(EX_OSERR, NULL, "out of memory");
 
        ct->c_fp = in;
        ct->c_file = getcpy(file);
@@ -284,11 +288,11 @@ get_content(FILE *in, char *file, int toplevel)
 
                case LENERR:
                case FMTERR:
-                       adios(NULL, "message format error in component #%d",
+                       adios(EX_DATAERR, NULL, "message format error in component #%d",
                                        compnum);
 
                default:
-                       adios(NULL, "getfld() returned %d", state);
+                       adios(EX_SOFTWARE, NULL, "getfld() returned %d", state);
                }
 
                /* break out of the loop */
@@ -978,7 +982,7 @@ InitText(CT ct)
 
        /* allocate text character set structure */
        if ((t = (struct text *) calloc(1, sizeof(*t))) == NULL)
-               adios(NULL, "out of memory");
+               adios(EX_OSERR, NULL, "out of memory");
        ct->c_ctparams = (void *) t;
 
        /* scan for charset parameter */
@@ -1031,7 +1035,7 @@ InitMultiPart(CT ct)
        if (ct->c_encoding != CE_7BIT && ct->c_encoding != CE_8BIT
                && ct->c_encoding != CE_BINARY) {
                admonish(NULL, "\"%s/%s\" type in message %s must be encoded in 7bit, 8bit, or binary", ci->ci_type, ci->ci_subtype, ct->c_file);
-               return NOTOK;
+               ct->c_encoding = CE_7BIT;
        }
 
        /* match subtype */
@@ -1060,7 +1064,7 @@ InitMultiPart(CT ct)
 
        /* allocate primary structure for multipart info */
        if ((m = (struct multipart *) calloc(1, sizeof(*m))) == NULL)
-               adios(NULL, "out of memory");
+               adios(EX_OSERR, NULL, "out of memory");
        ct->c_ctparams = (void *) m;
 
        /* check if boundary parameter contains only whitespace characters */
@@ -1105,7 +1109,7 @@ InitMultiPart(CT ct)
 next_part:
                        if ((part = (struct part *) calloc(1, sizeof(*part)))
                                        == NULL)
-                               adios(NULL, "out of memory");
+                               adios(EX_OSERR, NULL, "out of memory");
                        *next = part;
                        next = &part->mp_next;
 
@@ -1220,7 +1224,7 @@ reverse_parts(CT ct)
 
        /* allocate array of pointers to the parts */
        if (!(base = (struct part **) calloc((size_t) (i + 1), sizeof(*base))))
-               adios(NULL, "out of memory");
+               adios(EX_OSERR, NULL, "out of memory");
        bmp = base;
 
        /* point at all the parts */
@@ -1277,7 +1281,7 @@ InitMessage(CT ct)
                struct partial *p;
 
                if ((p = (struct partial *) calloc(1, sizeof(*p))) == NULL)
-                       adios(NULL, "out of memory");
+               adios(EX_OSERR, NULL, "out of memory");
                ct->c_ctparams = (void *) p;
 
                /*
@@ -1390,7 +1394,7 @@ init_encoding(CT ct, OpenCEFunc openfnx)
        CE ce;
 
        if ((ce = (CE) calloc(1, sizeof(*ce))) == NULL)
-               adios(NULL, "out of memory");
+               adios(EX_OSERR, NULL, "out of memory");
 
        ct->c_cefile     = ce;
        ct->c_ceopenfnx  = openfnx;
@@ -1546,7 +1550,7 @@ openBase64(CT ct, char **file)
                        char *file_org = strdup(ce->ce_file);
                        ce->ce_file = add(cp, ce->ce_file);
                        if (rename(file_org, ce->ce_file)) {
-                               adios(ce->ce_file, "unable to rename %s to ",
+                               adios(EX_IOERR, ce->ce_file, "unable to rename %s to ",
                                                file_org);
                        }
                        free(file_org);
@@ -1563,7 +1567,7 @@ openBase64(CT ct, char **file)
        }
 
        if ((len = ct->c_end - ct->c_begin) < 0)
-               adios(NULL, "internal error(1)");
+               adios(EX_SOFTWARE, NULL, "internal error(1)");
 
        if (!ct->c_fp) {
                if ((ct->c_fp = fopen(ct->c_file, "r")) == NULL) {
@@ -1757,7 +1761,7 @@ openQuoted(CT ct, char **file)
                        char *file_org = strdup(ce->ce_file);
                        ce->ce_file = add(cp, ce->ce_file);
                        if (rename(file_org, ce->ce_file)) {
-                               adios(ce->ce_file, "unable to rename %s to ",
+                               adios(EX_IOERR, ce->ce_file, "unable to rename %s to ",
                                                file_org);
                        }
                        free(file_org);
@@ -1774,7 +1778,7 @@ openQuoted(CT ct, char **file)
        }
 
        if ((len = ct->c_end - ct->c_begin) < 0)
-               adios(NULL, "internal error(2)");
+               adios(EX_SOFTWARE, NULL, "internal error(2)");
 
        if (!ct->c_fp) {
                if ((ct->c_fp = fopen(ct->c_file, "r")) == NULL) {
@@ -1974,7 +1978,7 @@ open7Bit(CT ct, char **file)
                        char *file_org = strdup(ce->ce_file);
                        ce->ce_file = add(cp, ce->ce_file);
                        if (rename(file_org, ce->ce_file)) {
-                               adios(ce->ce_file, "unable to rename %s to ",
+                               adios(EX_IOERR, ce->ce_file, "unable to rename %s to ",
                                                file_org);
                        }
                        free(file_org);
@@ -2040,7 +2044,7 @@ open7Bit(CT ct, char **file)
        }
 
        if ((len = ct->c_end - ct->c_begin) < 0)
-               adios(NULL, "internal error(3)");
+               adios(EX_SOFTWARE, NULL, "internal error(3)");
 
        if (!ct->c_fp) {
                if ((ct->c_fp = fopen(ct->c_file, "r")) == NULL) {