aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--NEWS18
-rw-r--r--report.c3
2 files changed, 20 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 0cd3f968..b98f15d2 100644
--- a/NEWS
+++ b/NEWS
@@ -82,6 +82,24 @@ removed from a 6.5.0 or newer release.)
server to test against. Use GSSAPI.
--------------------------------------------------------------------------------
+fetchmail-6.4.21 (released 2021-08-09, 30042 LoC):
+
+# REGRESSION FIX:
+* The new security fix in 6.4.20 for CVE-2021-36386 caused truncation of
+ messages logged to buffered outputs, predominantly --logfile.
+
+ This also caused lines in the logfile to run into one another because
+ the fragment containing the '\n' line-end character was usually lost.
+
+ Reason is that on all modern systems (with <stdarg.h> header and vsnprintf()
+ interface), the length of log message fragments was added up twice, so
+ that these ended too deep into a freshly allocated buffer, after the '\0'
+ byte. Unbuffered outputs flushed the fragments right away, which masked the
+ bug.
+
+ Reported by: Jürgen Edner, Erik Christiansen.
+
+--------------------------------------------------------------------------------
fetchmail-6.4.20 (released 2021-07-28, 30042 LoC):
# SECURITY FIX:
diff --git a/report.c b/report.c
index aea6b3ea..2db7d0a9 100644
--- a/report.c
+++ b/report.c
@@ -286,10 +286,11 @@ report_build (FILE *errfp, message, va_alist)
n = snprintf (partial_message + partial_message_size_used,
partial_message_size - partial_message_size_used,
message, a1, a2, a3, a4, a5, a6, a7, a8);
-#endif
if (n > 0) partial_message_size_used += n;
+#endif
+
if (unbuffered && partial_message_size_used != 0)
{
partial_message_size_used = 0;