aboutsummaryrefslogtreecommitdiffstats
path: root/transact.c
diff options
context:
space:
mode:
Diffstat (limited to 'transact.c')
-rw-r--r--transact.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/transact.c b/transact.c
index e98be346..cae6b701 100644
--- a/transact.c
+++ b/transact.c
@@ -428,6 +428,8 @@ int readheaders(int sock,
linelen = 0;
line[0] = '\0';
do {
+ char *sp, *tp;
+
set_timeout(mytimeout);
if ((n = SockRead(sock, buf, sizeof(buf)-1)) == -1) {
set_timeout(0);
@@ -438,6 +440,18 @@ int readheaders(int sock,
}
set_timeout(0);
+ /*
+ * Smash out any medial NULs, they could wreak havoc later on.
+ * Some network stacks seem to generate these at random,
+ * always (according to reports) at the beginning of the
+ * first read. NUls are illegal in RFC822 format.
+ */
+ for (sp = tp = buf; sp < buf + n; sp++)
+ if (*sp)
+ *tp++ = *sp;
+ *tp = '\0';
+ n = tp - buf;
+
remaining -= n;
linelen += n;
msgblk.msglen += n;