The following diff fixes a stack overflow in the CDDB handling code in
MPlayer.
CVE-2007-2948
Index: Makefile
===================================================================
RCS file: /cvs/ports/x11/mplayer/Makefile,v
retrieving revision 1.118
diff -u -p -r1.118 Makefile
--- Makefile 28 Apr 2007 11:09:51 -0000 1.118
+++ Makefile 7 Jun 2007 04:05:39 -0000
@@ -7,7 +7,7 @@ COMMENT= "Movie player supporting MPEG,
DISTNAME= MPlayer-1.0pre8
DIST_SUBDIR= mplayer
-PKGNAME= ${DISTNAME:L}p13
+PKGNAME= ${DISTNAME:L}p14
CATEGORIES= x11
EXTRACT_SUFX= .tar.bz2
Index: patches/patch-libmpdemux_cddb_c
===================================================================
RCS file: patches/patch-libmpdemux_cddb_c
diff -N patches/patch-libmpdemux_cddb_c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ patches/patch-libmpdemux_cddb_c 7 Jun 2007 04:21:35 -0000
@@ -0,0 +1,30 @@
+$OpenBSD$
+--- libmpdemux/cddb.c.orig Thu Jun 7 00:18:16 2007
++++ libmpdemux/cddb.c Thu Jun 7 00:21:18 2007
+@@ -437,7 +437,7 @@ cddb_read_parse(HTTP_header_t *http_hdr, cddb_data_t *
+
+ switch(status) {
+ case 210:
+- ret = sscanf( http_hdr->body, "%d %s %08lx", &status,
category, &disc_id);
++ ret = sscanf( http_hdr->body, "%d %99s %08lx", &status,
category, &disc_id);
+ if( ret!=3 ) {
+ mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
+ return -1;
+@@ -498,7 +498,7 @@ cddb_parse_matches_list(HTTP_header_t *http_hdr, cddb_
+ ptr++;
+ // We have a list of exact/inexact matches, so which one do we use?
+ // So let's take the first one.
+- ret = sscanf(ptr, "%s %08lx %s", cddb_data->category,
&(cddb_data->disc_id), album_title);
++ ret = sscanf(ptr, "%99s %08lx %99s", cddb_data->category,
&(cddb_data->disc_id), album_title);
+ if( ret!=3 ) {
+ mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
+ return -1;
+@@ -535,7 +535,7 @@ cddb_query_parse(HTTP_header_t *http_hdr, cddb_data_t
+ switch(status) {
+ case 200:
+ // Found exact match
+- ret = sscanf(http_hdr->body, "%d %s %08lx %s", &status,
cddb_data->category, &(cddb_data->disc_id), album_title);
++ ret = sscanf(http_hdr->body, "%d %99s %08lx %99s",
&status, cddb_data->category, &(cddb_data->disc_id), album_title);
+ if( ret!=4 ) {
+ mp_msg(MSGT_DEMUX, MSGL_ERR, MSGTR_ParseError);
+ return -1;