Date: Wed, 11 Feb 2004 15:21:14 +0100
From: Thomas Roessler <roessler@does-not-exist.org>
To: BUGTRAQ@securityfocus.com
Subject: Mutt-1.4.2 fixes buffer overflow.
Message-ID: <20040211142114.GB17205@voyager.does-not-exist.org>
Mail-Followup-To: BUGTRAQ@securityfocus.com
Mime-Version: 1.0
Content-Disposition: inline
User-Agent: Mutt/1.5.6i
Sender: owner-mutt-announce@mutt.org


Mutt-1.4.2 has just been released; this version fixes a buffer
overflow that can be triggered by incoming messages.  There are
reports about spam that has actually triggered this problem and
crashed mutt.

It is recommended that users of mutt versions prior to 1.4.2 upgrade
to this version, or apply the patch included below.

Users of "unstable" mutt versions after 1.3.28 (including 1.5.*) do
not need to upgrade, as this problem had been fixed in the unstable
branch in February 2002; unfortunately, the fix was not backported
before 1.4 was released.


mutt-1.4.2 can be found at ftp://ftp.mutt.org/mutt/.

Distribution files:

  MD5 checksum                    file name             size

44fc379c317109f516894a7c3fd43cc9  diff-1.4.1i-1.4.2i.gz	(23k)
6045b47cbba8170d6a9fdccc1aa817b9  mutt-1.4.2i.tar.gz	(2.4M)

Linux distributors are expected to release updated mutt packages
shortly.


Credits:  The problem in the stable mutt code base was originally
reported to Red Hat, and was brought to my attention by Mark Cox.

The Common Vulnerabilities and Exposures project (cve.mitre.org) has
assigned the name CAN-2004-0078 to this issue.  
		
Regards,
-- 
Thomas Roessler · Personal soap box at <http://log.does-not-exist.org/>.






Index: menu.c
===================================================================
RCS file: /cvs/mutt/mutt/menu.c,v
retrieving revision 2.27.2.1
diff -u -r2.27.2.1 menu.c
--- menu.c	28 Jan 2002 10:18:50 -0000	2.27.2.1
+++ menu.c	11 Feb 2004 10:05:52 -0000
@@ -148,30 +148,13 @@
     menu->make_entry (s, l, menu, i);
 }
 
-void menu_pad_string (char *s, size_t l)
+void menu_pad_string (char *s, size_t n)
 {
-  size_t n = mutt_strlen (s);
   int shift = option (OPTARROWCURSOR) ? 3 : 0;
-  
-  l--; /* save room for the terminal \0 */
-  if (l > COLS - shift)
-    l = COLS - shift;
+  int cols = COLS - shift;
 
-  /* Let's just pad the string anyway ... */
-  mutt_format_string (s, INT_MAX, l, l, 0, ' ', s, n, 1);
-  return;
-
-#if !defined (HAVE_BKGDSET) && !defined (USE_SLANG_CURSES)
-  /* we have to pad the string with blanks to the end of line */
-  if (n < l)
-  {
-    while (n < l)
-      s[n++] = ' ';
-    s[n] = 0;
-  }
-  else
-#endif
-    s[l] = 0;
+  mutt_format_string (s, n, cols, cols, 0, ' ', s, strlen (s), 1);
+  s[n - 1] = 0;
 }
 
 void menu_redraw_full (MUTTMENU *menu)
