m_getfld2: ERR2 means a read error, thus name it IOERR2
[mmh] / sbr / m_getfld2.c
index 91164f3..5920425 100644 (file)
@@ -27,7 +27,7 @@ static size_t copyname(char *, char *);
 
 /*
 ** For the states FLD2, BODY2 and FMTERR2 memory is allocated for f->value.
-** For the states LENERR2, ERR2 and FILEEOF2 no memory is allocated.
+** For the states LENERR2, IOERR2 and FILEEOF2 no memory is allocated.
 */
 enum state
 m_getfld2(enum state s, struct field *f, FILE *msg)
@@ -42,7 +42,7 @@ m_getfld2(enum state s, struct field *f, FILE *msg)
                if (feof(msg)) {
                        return FILEEOF2;
                } else {
-                       return ERR2;
+                       return IOERR2;
                }
        }
 
@@ -95,7 +95,7 @@ m_getfld2(enum state s, struct field *f, FILE *msg)
                        nchars = getline(&tmpline, &len, msg);
                        if (nchars <= 0) {
                                free(tmpline);
-                               return ERR2;
+                               return IOERR2;
                        }
 
                        if (nchars >= NAMESZ) {
@@ -125,7 +125,7 @@ m_getfld2(enum state s, struct field *f, FILE *msg)
 
                if (falted == FAIL) {
                        free(tmpline);
-                       return ERR2;
+                       return IOERR2;
                }
 
                free(tmpline);
@@ -175,11 +175,17 @@ static size_t
 copyname(char *dst, char *src)
 {
        size_t len;
-       char *sep = strchr(src, ':');
+       char *cp, *sep;
 
-       if (!sep) {
+       if (!(sep = strchr(src, ':'))) {
                return 0;
        }
+       /* whitespace is forbidden in name */
+       for (cp=src; cp<sep; cp++) {
+               if (isspace(*cp)) {
+                       return 0;
+               }
+       }
 
        len = sep - src;
        if (len >= NAMESZ) {