summaryrefslogtreecommitdiff
path: root/multimedia/mplayer-share
diff options
context:
space:
mode:
authorsalo <salo@pkgsrc.org>2005-12-10 23:34:41 +0000
committersalo <salo@pkgsrc.org>2005-12-10 23:34:41 +0000
commitff0f7770ff1bdf730893237d33fd04762943d1b1 (patch)
treef8671c0aa9354cdd1cbc18cc749a86d0fe95b61a /multimedia/mplayer-share
parent7f6a67613972c50036263c67445d91f340877675 (diff)
downloadpkgsrc-ff0f7770ff1bdf730893237d33fd04762943d1b1.tar.gz
Security fix for SA17892:
"A vulnerability in FFmpeg libavcodec can be exploited by malicious people to cause a DoS (Denial of Service) and potentially to compromise a user's system." http://secunia.com/advisories/17892/ Fix from ffmpeg CVS repository, libavcodec/utils.c rev. 1.162: "default_get_buffer() cleanup fixes probably exploitable heap overflow heap overflow found by (Simon Kilvington)"
Diffstat (limited to 'multimedia/mplayer-share')
-rw-r--r--multimedia/mplayer-share/distinfo3
-rw-r--r--multimedia/mplayer-share/patches/patch-ai82
2 files changed, 84 insertions, 1 deletions
diff --git a/multimedia/mplayer-share/distinfo b/multimedia/mplayer-share/distinfo
index 259fbb054c6..5e231cf9457 100644
--- a/multimedia/mplayer-share/distinfo
+++ b/multimedia/mplayer-share/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.24 2005/10/24 19:46:05 minskim Exp $
+$NetBSD: distinfo,v 1.25 2005/12/10 23:34:42 salo Exp $
SHA1 (mplayer-1.0rc7/MPlayer-1.0pre7.tar.bz2) = df1e8d4f2f44d72c6f7989932f3b272e815ecb80
RMD160 (mplayer-1.0rc7/MPlayer-1.0pre7.tar.bz2) = a4bac10df287c4b134ea49b3bc9bf7fb0126cae6
@@ -20,6 +20,7 @@ SHA1 (patch-ae) = 601808d8c89cba68156fb3c95fe9fcfb8da4fca0
SHA1 (patch-af) = 6eab8572b239f6ac7afc03ad6254a7c97f90663e
SHA1 (patch-ag) = 9bc3466ef24970e3f26fc64601d9f2c27fa394d2
SHA1 (patch-ah) = 744f073e791257768e5ec7da8e321d2f25d1fb2c
+SHA1 (patch-ai) = a884b7a23ff8b2c31e6190d2ba9989a8f0057a0c
SHA1 (patch-da) = be092da4f854708c1ef47f10c26e361c095a6799
SHA1 (patch-dc) = b11ef06a89f13e2ae5e013d569aa5acc99c770aa
SHA1 (patch-dd) = e5b23b73a1e53e3185ecbac26042432395cd5e63
diff --git a/multimedia/mplayer-share/patches/patch-ai b/multimedia/mplayer-share/patches/patch-ai
new file mode 100644
index 00000000000..203e8dc9d82
--- /dev/null
+++ b/multimedia/mplayer-share/patches/patch-ai
@@ -0,0 +1,82 @@
+$NetBSD: patch-ai,v 1.1 2005/12/10 23:34:42 salo Exp $
+
+Security fix for SA17892, from ffmpeg CVS repository.
+
+--- libavcodec/utils.c.orig 2005-04-16 22:41:13.000000000 +0200
++++ libavcodec/utils.c 2005-12-10 23:59:36.000000000 +0100
+@@ -276,49 +276,50 @@
+ buf->last_pic_num= *picture_number;
+ }else{
+ int h_chroma_shift, v_chroma_shift;
+- int pixel_size;
++ int pixel_size, size[3];
++ AVPicture picture;
+
+ avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift);
+
+- switch(s->pix_fmt){
+- case PIX_FMT_RGB555:
+- case PIX_FMT_RGB565:
+- case PIX_FMT_YUV422:
+- case PIX_FMT_UYVY422:
+- pixel_size=2;
+- break;
+- case PIX_FMT_RGB24:
+- case PIX_FMT_BGR24:
+- pixel_size=3;
+- break;
+- case PIX_FMT_RGBA32:
+- pixel_size=4;
+- break;
+- default:
+- pixel_size=1;
+- }
+-
+ avcodec_align_dimensions(s, &w, &h);
+
+ if(!(s->flags&CODEC_FLAG_EMU_EDGE)){
+ w+= EDGE_WIDTH*2;
+ h+= EDGE_WIDTH*2;
+ }
++ avpicture_fill(&picture, NULL, s->pix_fmt, w, h);
++ pixel_size= picture.linesize[0]*8 / w;
++//av_log(NULL, AV_LOG_ERROR, "%d %d %d %d\n", (int)picture.data[1], w, h, s->pix_fmt);
++ assert(pixel_size>=1);
++ //FIXME next ensures that linesize= 2^x uvlinesize, thats needed because some MC code assumes it
++ if(pixel_size == 3*8)
++ w= ALIGN(w, STRIDE_ALIGN<<h_chroma_shift);
++ else
++ w= ALIGN(pixel_size*w, STRIDE_ALIGN<<(h_chroma_shift+3)) / pixel_size;
++ size[1] = avpicture_fill(&picture, NULL, s->pix_fmt, w, h);
++ size[0] = picture.linesize[0] * h;
++ size[1] -= size[0];
++ if(picture.data[2])
++ size[1]= size[2]= size[1]/2;
++ else
++ size[2]= 0;
+
+ buf->last_pic_num= -256*256*256*64;
++ memset(buf->base, 0, sizeof(buf->base));
++ memset(buf->data, 0, sizeof(buf->data));
+
+- for(i=0; i<3; i++){
++ for(i=0; i<3 && size[i]; i++){
+ const int h_shift= i==0 ? 0 : h_chroma_shift;
+ const int v_shift= i==0 ? 0 : v_chroma_shift;
+
+- //FIXME next ensures that linesize= 2^x uvlinesize, thats needed because some MC code assumes it
+- buf->linesize[i]= ALIGN(pixel_size*w>>h_shift, STRIDE_ALIGN<<(h_chroma_shift-h_shift));
++ buf->linesize[i]= picture.linesize[i];
+
+- buf->base[i]= av_malloc((buf->linesize[i]*h>>v_shift)+16); //FIXME 16
++ buf->base[i]= av_malloc(size[i]+16); //FIXME 16
+ if(buf->base[i]==NULL) return -1;
+- memset(buf->base[i], 128, buf->linesize[i]*h>>v_shift);
++ memset(buf->base[i], 128, size[i]);
+
+- if(s->flags&CODEC_FLAG_EMU_EDGE)
++ // no edge if EDEG EMU or not planar YUV, we check for PAL8 redundantly to protect against a exploitable bug regression ...
++ if((s->flags&CODEC_FLAG_EMU_EDGE) || (s->pix_fmt == PIX_FMT_PAL8) || !size[2])
+ buf->data[i] = buf->base[i];
+ else
+ buf->data[i] = buf->base[i] + ALIGN((buf->linesize[i]*EDGE_WIDTH>>v_shift) + (EDGE_WIDTH>>h_shift), STRIDE_ALIGN);