[pkg-fetchmail-maint] Bug#416625: [fetchmail-devel] [PATCH] fix segfault in sink.c if fopen returns NULL

Matthias Andree matthias.andree at gmx.de
Thu Mar 29 23:55:53 UTC 2007


Nico Golde schrieb am 2007-03-29:

> the attached patch fixes #416625 in Debian.

And removes the error check after writing the DATA line - reinstated,
fflush() added, clarified error messages (sorry this takes another
translation run). I've merged a different patch (attached). Back out
yours first. Still, thank you for forwarding the report and the
suggested fix.

BTW, has anyone ever used BSMTP? It failed for me with PS_SOCKET after
writing the first header, no matter if I used IMAP or POP3 with --all.
The attached patch should fix that as well. (First hunk.)

-- 
Matthias Andree
-------------- next part --------------
Index: sink.c
===================================================================
--- sink.c	(Revision 5069)
+++ sink.c	(Revision 5071)
@@ -686,7 +686,7 @@
 
     n = 0;
     if (ctl->mda || ctl->bsmtp) {
-	n = fwrite(buf, last - buf, 1, sinkfp);
+	n = fwrite(buf, 1, last - buf, sinkfp);
 	if (ferror(sinkfp)) n = -1;
     } else if (ctl->smtp_socket != -1)
 	n = SockWrite(ctl->smtp_socket, buf, last - buf);
@@ -708,6 +708,12 @@
     else
 	sinkfp = fopen(ctl->bsmtp, "a");
 
+    if (!sinkfp || ferror(sinkfp)) {
+	report(stderr, GT_("BSMTP file open failed: %s\n"), 
+		strerror(errno));
+        return(PS_BSMTP);
+    }
+
     /* see the ap computation under the SMTP branch */
     need_anglebrs = (msg->return_path[0] != '<');
     fprintf(sinkfp,
@@ -747,9 +753,9 @@
 
     fputs("DATA\r\n", sinkfp);
 
-    if (ferror(sinkfp))
+    if (fflush(sinkfp) || ferror(sinkfp))
     {
-	report(stderr, GT_("BSMTP file open or preamble write failed\n"));
+	report(stderr, GT_("BSMTP preamble write failed.\n"));
 	return(PS_BSMTP);
     }
 


More information about the pkg-fetchmail-maint mailing list