]> git.marmaro.de Git - mmh/commitdiff
better error handling
authorPhilipp Takacs <philipp@bureaucracy.de>
Mon, 25 Apr 2016 14:19:54 +0000 (16:19 +0200)
committerPhilipp Takacs <philipp@bureaucracy.de>
Sun, 1 May 2016 17:56:31 +0000 (19:56 +0200)
only warn for LENERR2, or ignore it in some cases

sbr/readconfig.c
uip/mhparse.c
uip/new.c
uip/pick.c
uip/prompter.c
uip/slocal.c
uip/sortm.c
uip/whom.c

index 6975d724ad50f943e09bff5f035e02b4369a13a0..45e1cb6fcc21b62d3b4d17eaca36ff0a3192c914 100644 (file)
@@ -48,6 +48,9 @@ readconfig(struct node **npp, FILE *ib, char *file, int ctx)
 
        for (state = FLD2;;) {
                switch (state = m_getfld2(state, &f, ib)) {
+               case LENERR2:
+                       state = FLD2;
+                       /* FALL */
                case FLD2:
                        np = mh_xcalloc(1, sizeof(*np));
                        *npp = np;
@@ -68,7 +71,10 @@ readconfig(struct node **npp, FILE *ib, char *file, int ctx)
                                }
                        }
                        continue;
-
+               case FMTERR2:
+                       advise(NULL, "%s is poorly formated", file);
+                       state = FLD2;
+                       continue;
                case BODY2:
                        adios(EX_CONFIG, NULL, "no blank lines are permitted in %s",
                                        file);
@@ -76,6 +82,10 @@ readconfig(struct node **npp, FILE *ib, char *file, int ctx)
                case FILEEOF2:
                        break;
 
+               case IOERR2:
+                       adios(EX_IOERR, NULL, "m_getfld2", "some error happend");
+                       break;
+
                default:
                        adios(EX_CONFIG, NULL, "%s is poorly formatted", file);
                }
index 67d769caf01ea497d3ec1a2056c50b2a7a0c7c20..c2506755663e4e7c498861ad18a5b87c703b8f8f 100644 (file)
@@ -250,6 +250,10 @@ get_content(FILE *in, char *file, int toplevel)
        */
        for (compnum = 1, state = FLD2;;) {
                switch (state = m_getfld2(state, &f, in)) {
+               case LENERR2:
+                       advise(NULL, "To long field");
+                       state = FLD2;
+                       /* FALL */
                case FLD2:
                        compnum++;
 
@@ -267,11 +271,13 @@ get_content(FILE *in, char *file, int toplevel)
                        ct->c_begin = ftell(in);
                        break;
 
-               case LENERR2:
                case FMTERR2:
+                       advise(NULL, "message format error in component #%d", compnum);
+                       state = FLD2;
+                       continue;
+
                case IOERR2:
-                       adios(EX_DATAERR, NULL, "message format error in component #%d",
-                                       compnum);
+                       adios(EX_IOERR, "m_getfld2", "io error");
 
                default:
                        adios(EX_SOFTWARE, NULL, "getfld() returned %d", state);
index 4335892e0497b636421449498e882f67ddc741bf..efbea0439c648920c263e7e20142328eedfcee8b 100644 (file)
--- a/uip/new.c
+++ b/uip/new.c
@@ -108,6 +108,10 @@ get_msgnums(char *folder, char *sequences[])
 
        for (state = FLD2;;) {
                switch (state = m_getfld2(state, &f, fp)) {
+               case LENERR2:
+                       state = FLD2;
+                       /* FALL */
+
                case FLD2:
                        /*
                        ** if it's in a sequence we want,
index 5df2861a2c19b6ca03f4c483a4fe9cb70342d561..b0205fdfaa819ec2df9dd1975061bcb925d57eca 100644 (file)
@@ -1261,8 +1261,12 @@ plist
 
                case LENERR2:
                case FMTERR2:
-               case IOERR2:
                        advise(NULL, "format error in message %d", msgnum);
+                       state = FLD2;
+                       continue;
+
+               case IOERR2:
+                       adios(EX_IOERR, "m_getfld2", "io error on message %d", msgnum);
                        /* FALL */
 
                case BODY2:
index c7eb95787faad7b09aad5bc1e4074972d9b2aa09..bc7cd43f6454dea9fe49df51e28b4b5d0ae2752a 100644 (file)
@@ -140,6 +140,10 @@ main(int argc, char **argv)
        */
        for (state = FLD2;;) {
                switch (state = m_getfld2(state, &f, in)) {
+               case LENERR2:
+                       advise(NULL, "Header to long");
+                       state = FLD2;
+                       /* FALL */
                case FLD2:
                        /*
                        ** Check if the value of field contains
@@ -212,6 +216,9 @@ abort:
                                        }
                                } while ((state = m_getfld2(state, &f, in))
                                                ==BODY2);
+                               if (state != FILEEOF2) {
+                                       adios(EX_IOERR, "m_getfld2", "io error");
+                               }
                        }
 
                        if (prepend || !qbody) {
@@ -230,8 +237,11 @@ has_no_body:
                        }
                        break;
 
+               case FMTERR2:
+                       advise(NULL, "skeleton is poorly formatted");
+                       continue;
                default:
-                       adios(EX_DATAERR, NULL, "skeleton is poorly formatted");
+                       adios(EX_IOERR, "m_getfld2", "io error");
                }
                break;
        }
index f8f9d9537931be93650a662e70d8cfff4b4e4423..26cad52e0ccaf194125f745276d4b0b9a53fdb75 100644 (file)
@@ -758,6 +758,11 @@ parse(int fd)
        */
        for (i = 0, state = FLD2;;) {
                switch (state = m_getfld2(state, &f, in)) {
+               case LENERR2:
+                       advise(NULL, "format error in message");
+                       state = FLD2;
+                       /* FALL */
+
                case FLD2:
                        lp = mh_xstrdup(f.value);
                        for (p = hdrs; p->p_name; p++) {
@@ -793,7 +798,6 @@ parse(int fd)
                case FILEEOF2:
                        break;
 
-               case LENERR2:
                case FMTERR2:
                case IOERR2:
                        advise(NULL, "format error in message");
index 56fa7cb59a43ea3701d9534b4ecfd4e85601a17c..061ae5a435876941f39939255a085e9ef46ff16a 100644 (file)
@@ -331,6 +331,10 @@ get_fields(char *datesw, int msg, struct smsg *smsg)
        }
        for (compnum = 1, state = FLD2;; compnum++) {
                switch (state = m_getfld2(state, &f, in)) {
+               case LENERR2:
+                       admonish(NULL, "To long header field in message %d (header %s, #%d)", msg, f.name, compnum);
+                       state = FLD2;
+                       /* FALL */
                case FLD2:
                        if (mh_strcasecmp(f.name, datesw)==0) {
                                datecomp = mh_xstrdup(f.value);
@@ -350,7 +354,6 @@ get_fields(char *datesw, int msg, struct smsg *smsg)
                case FILEEOF2:
                        break;
 
-               case LENERR2:
                case FMTERR2:
                case IOERR2:
                        admonish(NULL, "format error in message %d (header #%d)", msg, compnum);
index daca343b121b1dcd76c7fe711a496bcf971f2aac..e02994f139ebdb4151bb780afd7423b88ff5377c 100644 (file)
@@ -215,6 +215,10 @@ process(char *file)
 
        for (compnum=1, state=FLD2;; compnum++) {
                switch (state = m_getfld2(state, &f, in)) {
+               case LENERR2:
+                       advise(NULL, "field %d contains a to long line", f.name);
+                       state = FLD2;
+                       /* FALL */
                case FLD2:
                        proc_hdr(f.name, f.value);
                        continue;
@@ -223,7 +227,6 @@ process(char *file)
                case FILEEOF2:
                        break;
 
-               case LENERR2:
                case FMTERR2:
                case IOERR2:
                        adios(EX_DATAERR, NULL, "message format error in component #%d",