Date: Fri, 11 Sep 2015 14:59:04 +0000 (UTC) From: Christian Weisgerber <naddy@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-branches@freebsd.org Subject: svn commit: r396673 - in branches/2015Q3/audio/vorbis-tools: . files Message-ID: <201509111459.t8BEx4tA088915@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: naddy Date: Fri Sep 11 14:59:04 2015 New Revision: 396673 URL: https://svnweb.freebsd.org/changeset/ports/396673 Log: MFH: r396532 r396599 Fix oggenc buffer overflow, crash on raw file close, channel integer overflow, and division by zero. PR: 202941 Submitted by: junovitch Obtained from: https://trac.xiph.org/ticket/2212 Obtained from: https://trac.xiph.org/changeset/19117 Obtained from: Fedora vorbis-tools Git (commit 63a1a62d) Security: CVE-2015-6749 Security: CVE-2014-9638 Security: CVE-2014-9639 Security: a35f415d-572a-11e5-b0a4-f8b156b6dcc8 Approved by: ports-secteam Added: branches/2015Q3/audio/vorbis-tools/files/patch-oggenc_audio.c - copied, changed from r396532, head/audio/vorbis-tools/files/patch-oggenc_audio.c branches/2015Q3/audio/vorbis-tools/files/patch-oggenc_oggenc.c - copied unchanged from r396599, head/audio/vorbis-tools/files/patch-oggenc_oggenc.c Modified: branches/2015Q3/audio/vorbis-tools/Makefile Directory Properties: branches/2015Q3/ (props changed) Modified: branches/2015Q3/audio/vorbis-tools/Makefile ============================================================================== --- branches/2015Q3/audio/vorbis-tools/Makefile Fri Sep 11 14:56:55 2015 (r396672) +++ branches/2015Q3/audio/vorbis-tools/Makefile Fri Sep 11 14:59:04 2015 (r396673) @@ -3,7 +3,7 @@ PORTNAME= vorbis-tools PORTVERSION= 1.4.0 -PORTREVISION= 8 +PORTREVISION= 10 PORTEPOCH= 3 CATEGORIES= audio MASTER_SITES= http://downloads.xiph.org/releases/vorbis/ Copied and modified: branches/2015Q3/audio/vorbis-tools/files/patch-oggenc_audio.c (from r396532, head/audio/vorbis-tools/files/patch-oggenc_audio.c) ============================================================================== --- head/audio/vorbis-tools/files/patch-oggenc_audio.c Wed Sep 9 20:07:01 2015 (r396532, copy source) +++ branches/2015Q3/audio/vorbis-tools/files/patch-oggenc_audio.c Fri Sep 11 14:59:04 2015 (r396673) @@ -1,6 +1,14 @@ --- oggenc/audio.c.orig 2010-03-24 08:27:14 UTC +++ oggenc/audio.c -@@ -245,8 +245,8 @@ static int aiff_permute_matrix[6][6] = +@@ -13,6 +13,7 @@ + #include <config.h> + #endif + ++#include <limits.h> + #include <stdlib.h> + #include <stdio.h> + #include <string.h> +@@ -245,12 +246,13 @@ static int aiff_permute_matrix[6][6] = int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen) { int aifc; /* AIFC or AIFF? */ @@ -11,7 +19,12 @@ unsigned char buf2[8]; aiff_fmt format; aifffile *aiff = malloc(sizeof(aifffile)); -@@ -269,9 +269,9 @@ int aiff_open(FILE *in, oe_enc_opt *opt, + int i; ++ long channels; + + if(buf[11]=='C') + aifc=1; +@@ -269,19 +271,25 @@ int aiff_open(FILE *in, oe_enc_opt *opt, return 0; /* Weird common chunk */ } @@ -24,3 +37,48 @@ { fprintf(stderr, _("Warning: Unexpected EOF in reading AIFF header\n")); return 0; + } + +- format.channels = READ_U16_BE(buffer); ++ format.channels = channels = READ_U16_BE(buffer); + format.totalframes = READ_U32_BE(buffer+2); + format.samplesize = READ_U16_BE(buffer+6); + format.rate = (int)read_IEEE80(buffer+8); + ++ if(channels <= 0L || SHRT_MAX < channels) ++ { ++ fprintf(stderr, _("Warning: Unsupported count of channels in AIFF header\n")); ++ return 0; ++ } ++ + aiff->bigendian = 1; + + if(aifc) +@@ -412,6 +420,7 @@ int wav_open(FILE *in, oe_enc_opt *opt, + wav_fmt format; + wavfile *wav = malloc(sizeof(wavfile)); + int i; ++ long channels; + + /* Ok. At this point, we know we have a WAV file. Now we have to detect + * whether we support the subtype, and we have to find the actual data +@@ -449,12 +458,18 @@ int wav_open(FILE *in, oe_enc_opt *opt, + } + + format.format = READ_U16_LE(buf); +- format.channels = READ_U16_LE(buf+2); ++ format.channels = channels = READ_U16_LE(buf+2); + format.samplerate = READ_U32_LE(buf+4); + format.bytespersec = READ_U32_LE(buf+8); + format.align = READ_U16_LE(buf+12); + format.samplesize = READ_U16_LE(buf+14); + ++ if(channels <= 0L || SHRT_MAX < channels) ++ { ++ fprintf(stderr, _("Warning: Unsupported count of channels in WAV header\n")); ++ return 0; ++ } ++ + if(format.format == -2) /* WAVE_FORMAT_EXTENSIBLE */ + { + if(len<40) Copied: branches/2015Q3/audio/vorbis-tools/files/patch-oggenc_oggenc.c (from r396599, head/audio/vorbis-tools/files/patch-oggenc_oggenc.c) ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ branches/2015Q3/audio/vorbis-tools/files/patch-oggenc_oggenc.c Fri Sep 11 14:59:04 2015 (r396673, copy of r396599, head/audio/vorbis-tools/files/patch-oggenc_oggenc.c) @@ -0,0 +1,21 @@ +--- oggenc/oggenc.c.orig 2010-03-26 07:07:07 UTC ++++ oggenc/oggenc.c +@@ -97,6 +97,8 @@ int main(int argc, char **argv) + .3,-1, + 0,0,0.f, + 0, 0, 0, 0, 0}; ++ input_format raw_format = {NULL, 0, raw_open, wav_close, "raw", ++ N_("RAW file reader")}; + + int i; + +@@ -239,9 +241,6 @@ int main(int argc, char **argv) + + if(opt.rawmode) + { +- input_format raw_format = {NULL, 0, raw_open, wav_close, "raw", +- N_("RAW file reader")}; +- + enc_opts.rate=opt.raw_samplerate; + enc_opts.channels=opt.raw_channels; + enc_opts.samplesize=opt.raw_samplesize;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201509111459.t8BEx4tA088915>