~ruther/guix-local

1d982d787dfdd6739fe6c829aee332e9b24bdc31 — Leo Famulari 9 years ago c68d812
gnu: procmail: Fix CVE-2014-3618.

* gnu/packages/patches/procmail-CVE-2014-3618.patch: New file.
* gnu/local.mk (dist_patch_DATA): Add it.
* gnu/packages/mail.scm (procmail): Use it.
3 files changed, 29 insertions(+), 1 deletions(-)

M gnu/local.mk
M gnu/packages/mail.scm
A gnu/packages/patches/procmail-CVE-2014-3618.patch
M gnu/local.mk => gnu/local.mk +1 -0
@@ 689,6 689,7 @@ dist_patch_DATA =						\
  %D%/packages/patches/portaudio-audacity-compat.patch		\
  %D%/packages/patches/portmidi-modular-build.patch		\
  %D%/packages/patches/procmail-ambiguous-getline-debian.patch  \
  %D%/packages/patches/procmail-CVE-2014-3618.patch		\
  %D%/packages/patches/pt-scotch-build-parallelism.patch	\
  %D%/packages/patches/pulseaudio-fix-mult-test.patch		\
  %D%/packages/patches/pulseaudio-longer-test-timeout.patch	\

M gnu/packages/mail.scm => gnu/packages/mail.scm +2 -1
@@ 1149,7 1149,8 @@ deliver it in various ways.")
       ;; The following patch fixes an ambiguous definition of
       ;; getline() in formail.c.  The patch is provided by Debian as
       ;; patch 24.
       (patches (search-patches "procmail-ambiguous-getline-debian.patch"))))
       (patches (search-patches "procmail-ambiguous-getline-debian.patch"
                                "procmail-CVE-2014-3618.patch"))))
    (arguments
     `(#:phases (modify-phases %standard-phases
                  (replace 'configure

A gnu/packages/patches/procmail-CVE-2014-3618.patch => gnu/packages/patches/procmail-CVE-2014-3618.patch +26 -0
@@ 0,0 1,26 @@
Fixes CVE-2014-3618 (heap overflow in formisc.c allowing denial of
service and potential remote execution of arbitrary code).
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3618

Source:
http://seclists.org/oss-sec/2014/q3/495

Adopted by Debian as patch '27':
https://sources.debian.net/src/procmail/3.22-25/debian/patches/27/

--- a/src/formisc.c
+++ b/src/formisc.c
@@ -84,12 +84,11 @@
 	case '"':*target++=delim='"';start++;
       }
      ;{ int i;
-	do
+	while(*start)
 	   if((i= *target++= *start++)==delim)	 /* corresponding delimiter? */
 	      break;
 	   else if(i=='\\'&&*start)		    /* skip quoted character */
 	      *target++= *start++;
-	while(*start);						/* anything? */
       }
      hitspc=2;
    }