X-Git-Url: http://git.marmaro.de/?p=mmh;a=blobdiff_plain;f=sbr%2Fm_getfld2.c;h=b9a618d166e245a37854003610f5a9cb1576ef0c;hp=45172aa21f9040cbac6800c26ca52b325a9ba8e4;hb=93fa896ceb5fbebe2f1f6e6e36419a13f8ffd99f;hpb=8c6b463904e23df6025727207d5ffd012c8dd0cb diff --git a/sbr/m_getfld2.c b/sbr/m_getfld2.c index 45172aa..b9a618d 100644 --- a/sbr/m_getfld2.c +++ b/sbr/m_getfld2.c @@ -62,7 +62,8 @@ m_getfld2(enum state s, struct field *f, FILE *msg) } } - if (nchars >= NAMESZ) { + f->crlf = (nchars > 2 && tmpline[nchars-2] == '\r'); + if (nchars > NAMESZ+1 || (!f->crlf && nchars > NAMESZ)) { ret = LENERR2; } @@ -96,14 +97,14 @@ m_getfld2(enum state s, struct field *f, FILE *msg) f->valuelen = nchars; } - while (ret == FLD2 && (falted = is_falted(msg)) == B_TRUE) { + while ((ret == FLD2 || ret == LENERR2) && (falted = is_falted(msg)) == B_TRUE) { nchars = getline(&tmpline, &len, msg); if (nchars <= 0) { free(tmpline); return IOERR2; } - if (nchars >= NAMESZ) { + if (nchars > NAMESZ+1 || (!f->crlf && nchars > NAMESZ)) { ret = LENERR2; } @@ -145,10 +146,7 @@ m_getfld2(enum state s, struct field *f, FILE *msg) } } - if (nchars >= NAMESZ) { - ret = LENERR2; - } - + f->crlf = (nchars > 2 && tmpline[nchars-2] == '\r'); free(f->value); f->value = tmpline; f->valuelen = nchars;