aboutsummaryrefslogtreecommitdiffstats
path: root/driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver.c')
-rw-r--r--driver.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/driver.c b/driver.c
index 383a2333..35bb3e8c 100644
--- a/driver.c
+++ b/driver.c
@@ -408,9 +408,8 @@ char *realname; /* real name of host */
{
char buf [MSGBUFSIZE+1];
int from_offs, to_offs, cc_offs, bcc_offs, ctt_offs, env_offs;
- char *headers, *received_for, *line;
- int n, oldlen, ch;
- int sizeticker, delete_ok;
+ char *headers, *received_for;
+ int n, oldlen, ch, sizeticker, delete_ok;
FILE *sinkfp;
RETSIGTYPE (*sigchld)();
#ifdef HAVE_GETHOSTBYNAME
@@ -430,13 +429,10 @@ char *realname; /* real name of host */
headers = received_for = NULL;
from_offs = to_offs = cc_offs = bcc_offs = ctt_offs = env_offs = -1;
oldlen = 0;
- line = (char *)NULL;
for (;;)
{
- char *bufp;
+ char *bufp, *line;
- if (line)
- free(line);
line = xmalloc(sizeof(buf));
line[0] = '\0';
do {
@@ -463,8 +459,12 @@ char *realname; /* real name of host */
}
len -= n;
+ /* check for end of headers; don't save terminating line */
if (line[0] == '\r' && line[1] == '\n')
- break; /* end of message */
+ {
+ free(line);
+ break;
+ }
if (!ctl->no_rewrite)
reply_hack(line, realname);
@@ -489,6 +489,7 @@ char *realname; /* real name of host */
bufp = headers + oldlen;
oldlen = newlen;
}
+ free(line);
if (from_offs == -1 && !strncasecmp("From:", bufp, 5))
from_offs = (bufp - headers);
@@ -500,9 +501,9 @@ char *realname; /* real name of host */
else if (!strncasecmp("To:", bufp, 3))
to_offs = (bufp - headers);
- else if (env_offs == -1 && !strncasecmp("Apparently-To:", bufp, 14))
- env_offs = (bufp - headers);
- else if (env_offs == -1 && !strncasecmp(ctl->server.envelope, bufp, 14))
+ else if (env_offs == -1 && !strncasecmp(ctl->server.envelope,
+ bufp,
+ strlen(ctl->server.envelope)))
env_offs = (bufp - headers);
else if (!strncasecmp("Cc:", bufp, 3))
@@ -520,9 +521,6 @@ char *realname; /* real name of host */
#endif /* HAVE_RES_SEARCH */
}
- if (line)
- free(line);
-
/*
* We can now process message headers before reading the text.
* In fact we have to, as this will tell us where to forward to.