X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/c2306df99ac5f27147cf1fdba2935700fb008d72..792d7e1e:/sbr/m_getfld.c?ds=inline diff --git a/sbr/m_getfld.c b/sbr/m_getfld.c index c0605b4d..f640a2aa 100644 --- a/sbr/m_getfld.c +++ b/sbr/m_getfld.c @@ -432,7 +432,8 @@ read_more (m_getfld_state_t s) { ssize_t retain = s->edelimlen; size_t num_read; - if (retain < s->end - s->readpos) retain = s->end - s->readpos; + if (retain < s->end - s->readpos) + retain = s->end - s->readpos; assert (retain <= s->readpos - s->msg_buf); /* Move what we want to retain at end of the buffer to the beginning. */ @@ -620,10 +621,12 @@ m_getfld (m_getfld_state_t *gstate, char name[NAMESZ], char *buf, int *bufsz, n = 0; for (finished = 0; ! finished; ) { while (c != '\n' && c != EOF && n++ < max) { - if ((c = Getc (s)) != EOF) { *cp++ = c; } + if ((c = Getc (s)) != EOF) + *cp++ = c; } - if (c != EOF) c = Peek (s); + if (c != EOF) + c = Peek (s); if (max < n) { /* The dest buffer is full. Need to back the read pointer up by one because when m_getfld() is @@ -810,18 +813,32 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob) delimstr = mmdlm2; s->msg_style = MS_MMDF; } + c = strlen (delimstr); - s->fdelim = mh_xmalloc (c + 3); + s->fdelim = mh_xmalloc (c + 3); /* \0, \n, delimstr, \0 */ *s->fdelim++ = '\0'; *s->fdelim = '\n'; + s->fdelimlen = c + 1; s->msg_delim = s->fdelim+1; - s->edelim = s->msg_delim+1; - s->fdelimlen = c; - s->edelimlen = c - 1; /* == strlen (delimstr) */ strcpy (s->msg_delim, delimstr); + s->edelim = s->msg_delim+1; + s->edelimlen = c - 1; s->delimend = s->msg_delim + s->edelimlen; if (s->edelimlen <= 1) adios (NULL, "maildrop delimiter must be at least 2 bytes"); + + /* Now malloc'd memory at s->fdelim-1 referenced several times: + * + * delimstr "\nFrom " "\001\001\001\001\n" + * c 6 5 + * s->fdelim \0"\n\nFrom " \0"\n\001\001\001\001\n" + * s->fdelimlen 6 5 + * s->msg_delim "\nFrom " "\001\001\001\001\n" + * s->edelim "From " "\001\001\001\n" + * s->edelimlen 5 4 + * s->delimend " " "\n" + */ + /* * build a Boyer-Moore end-position map for the matcher in m_getfld. * N.B. - we don't match just the first char (since it's the newline