summaryrefslogtreecommitdiff
path: root/vorbis-tools/vorbis-tools-CVE-2015-6749.patch
blob: 78e3c810e62c1558137d4b52464689f33f89de7a (plain)
    1 From 04815d3e1bfae3a6cdfb2c25358a5a72b61299f7 Mon Sep 17 00:00:00 2001
    2 From: Mark Harris <mark.hsj@gmail.com>
    3 Date: Sun, 30 Aug 2015 05:54:46 -0700
    4 Subject: [PATCH] oggenc: Fix large alloca on bad AIFF input
    5 
    6 Fixes #2212
    7 ---
    8  oggenc/audio.c | 10 +++++-----
    9  1 file changed, 5 insertions(+), 5 deletions(-)
   10 
   11 diff --git a/oggenc/audio.c b/oggenc/audio.c
   12 index 477da8c..4921fb9 100644
   13 --- a/oggenc/audio.c
   14 +++ b/oggenc/audio.c
   15 @@ -245,8 +245,8 @@ static int aiff_permute_matrix[6][6] =
   16  int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
   17  {
   18      int aifc; /* AIFC or AIFF? */
   19 -    unsigned int len;
   20 -    unsigned char *buffer;
   21 +    unsigned int len, readlen;
   22 +    unsigned char buffer[22];
   23      unsigned char buf2[8];
   24      aiff_fmt format;
   25      aifffile *aiff = malloc(sizeof(aifffile));
   26 @@ -269,9 +269,9 @@ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
   27          return 0; /* Weird common chunk */
   28      }
   29  
   30 -    buffer = alloca(len);
   31 -
   32 -    if(fread(buffer,1,len,in) < len)
   33 +    readlen = len < sizeof(buffer) ? len : sizeof(buffer);
   34 +    if(fread(buffer,1,readlen,in) < readlen ||
   35 +       (len > readlen && !seek_forward(in, len-readlen)))
   36      {
   37          fprintf(stderr, _("Warning: Unexpected EOF in reading AIFF header\n"));
   38          return 0;
   39 -- 
   40 2.5.0

Generated by cgit