aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric S. Raymond <esr@thyrsus.com>2003-10-10 13:49:27 +0000
committerEric S. Raymond <esr@thyrsus.com>2003-10-10 13:49:27 +0000
commit162805f4a30e828c2812cdb793a1587610e15ce1 (patch)
treeac8dd7c3347b904903037ba8fbd7870eca9238be
parent237e720198ab715d96cb75b86ade41431f64e8c4 (diff)
downloadfetchmail-162805f4a30e828c2812cdb793a1587610e15ce1.tar.gz
fetchmail-162805f4a30e828c2812cdb793a1587610e15ce1.tar.bz2
fetchmail-162805f4a30e828c2812cdb793a1587610e15ce1.zip
Smash all NULs out of headers.
svn path=/trunk/; revision=3845
-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;