Subject: mailx: Crashes when command line contains many digits
Package: mailx
Version: 1:8.1.2-0.20040524cvs-4
Severity: normal
Tags: patch

Hello,

mailx crashes when you give it a command line containing thousands of digits,
as shown in this example:


[EMAIL PROTECTED]:~/mailx-bug$ perl -e 'print "9"x2150, "\n";' | /usr/bin/mailx 
-f mailbox
Mail version 8.1.2 01/15/2001.  Type ? for help.
"mailbox": 1 message
>   1 [EMAIL PROTECTED]  Sun May 29 01:52   18/592   hi
-1: Invalid message number
"Source" stack over-pop.
Segmentation fault
[EMAIL PROTECTED]:~/mailx-bug$


This crash is caused by a buffer overflow. I see no security implications of 
this bug,
since that part of the code deals with data from the user and not data from 
e-mail
messages and since it only copies digits anyway. It is still worth fixing to 
improve
quality and stability.

I have attached a patch and the mailbox I used in the example above (it should 
work
with any mailbox file, though).

// Ulf Harnhammar

-- System Information:
Debian Release: 3.1
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.8-2-686
Locale: LANG=en_US, LC_CTYPE=en_US (charmap=ISO-8859-1)

Versions of packages mailx depends on:
ii  base-files                  3.1.2        Debian base system miscellaneous f
ii  exim4                       4.50-8       metapackage to ease exim MTA (v4) 
ii  exim4-daemon-light [mail-tr 4.50-8       lightweight exim MTA (v4) daemon
ii  libc6                       2.3.2.ds1-22 GNU C Library: Shared libraries an
ii  liblockfile1                1.06         NFS-safe locking library, includes

-- no debconf information

--- list.c.old  2003-10-14 14:50:21.000000000 +0200
+++ list.c      2005-06-13 00:49:38.194654056 +0200
@@ -543,7 +543,8 @@ scan(char **sp)
                lexnumber = 0;
                while (isdigit(c)) {
                        lexnumber = lexnumber*10 + c - '0';
-                       *cp2++ = c;
+                       if (cp2 - lexstring < STRINGLEN-1)
+                               *cp2++ = c;
                        c = *cp++;
                }
                *cp2 = '\0';
>From [EMAIL PROTECTED] Sun May 29 01:52:52 2005
Return-path: <[EMAIL PROTECTED]>
Envelope-to: [EMAIL PROTECTED]
Delivery-date: Sun, 29 May 2005 01:52:52 +0200
Received: from metaur by h215n2fls34o1123.telia.com with local (Exim 4.50)
        id 1DcB6q-0002WB-Du
        for [EMAIL PROTECTED]; Sun, 29 May 2005 01:52:52 +0200
To: [EMAIL PROTECTED]
Subject: hi
Message-Id: <[EMAIL PROTECTED]>
From: Ulf Harnhammar <[EMAIL PROTECTED]>
Date: Sun, 29 May 2005 01:52:52 +0200
Status: RO
Content-Length: 3
Lines: 1

hi

Reply via email to