From 3f35a382375e2b0b10e3bb8757af8060da460278 Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 16 Jul 2008 16:06:14 +0000 Subject: Do not just print a warning, also fix the len in ASF demuxer! git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27299 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_asf.c | 1 + 1 file changed, 1 insertion(+) (limited to 'libmpdemux') diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c index 65741d3ab7..72a1d98e2e 100644 --- a/libmpdemux/demux_asf.c +++ b/libmpdemux/demux_asf.c @@ -488,6 +488,7 @@ static int demux_asf_fill_buffer(demuxer_t *demux, demux_stream_t *ds){ } if(len<0 || (p+len)>p_end){ mp_msg(MSGT_DEMUX,MSGL_V,"ASF_parser: warning! segment len=%d\n",len); + len = p_end - p; } mp_dbg(MSGT_DEMUX,MSGL_DBG4," seg #%d: streamno=%d seq=%d type=%02X len=%d\n",seg,streamno,seq,rlen,len); -- cgit v1.2.3 From e870f84bfba4ba9830c78f347e72805cd227d068 Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 16 Jul 2008 16:18:25 +0000 Subject: Move duplicate FF_INPUT_BUFFER_PADDING_SIZE handling into demuxer.h git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27301 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_asf.c | 7 ------- libmpdemux/demux_real.c | 6 ------ libmpdemux/demux_viv.c | 6 ------ libmpdemux/demuxer.h | 8 +++++++- libmpdemux/video.c | 6 ------ 5 files changed, 7 insertions(+), 26 deletions(-) (limited to 'libmpdemux') diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c index 72a1d98e2e..d007ae1a3e 100644 --- a/libmpdemux/demux_asf.c +++ b/libmpdemux/demux_asf.c @@ -79,13 +79,6 @@ static void init_priv (struct asf_priv* asf){ asf->vid_ext_frame_index=-1; } -#ifdef USE_LIBAVCODEC -#include "libavcodec/avcodec.h" -#else -#define FF_INPUT_BUFFER_PADDING_SIZE 8 -#endif - - static void demux_asf_append_to_packet(demux_packet_t* dp,unsigned char *data,int len,int offs) { if(dp->len!=offs && offs!=-1) mp_msg(MSGT_DEMUX,MSGL_V,"warning! fragment.len=%d BUT next fragment offset=%d \n",dp->len,offs); diff --git a/libmpdemux/demux_real.c b/libmpdemux/demux_real.c index d48af16413..3490501302 100644 --- a/libmpdemux/demux_real.c +++ b/libmpdemux/demux_real.c @@ -33,12 +33,6 @@ Video codecs: (supported by RealPlayer8 for Linux) #include "demuxer.h" #include "stheader.h" -#ifdef USE_LIBAVCODEC -#include "libavcodec/avcodec.h" -#else -#define FF_INPUT_BUFFER_PADDING_SIZE 8 -#endif - //#define mp_dbg(mod,lev, args... ) mp_msg_c((mod<<8)|lev, ## args ) #define MKTAG(a, b, c, d) (a | (b << 8) | (c << 16) | (d << 24)) diff --git a/libmpdemux/demux_viv.c b/libmpdemux/demux_viv.c index 46ff28841d..7ee2332e27 100644 --- a/libmpdemux/demux_viv.c +++ b/libmpdemux/demux_viv.c @@ -14,12 +14,6 @@ #include "demuxer.h" #include "stheader.h" -#ifdef USE_LIBAVCODEC -#include "libavcodec/avcodec.h" -#else -#define FF_INPUT_BUFFER_PADDING_SIZE 8 -#endif - /* parameters ! */ int vivo_param_version = -1; char *vivo_param_acodec = NULL; diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index a2464c7390..76942a3aed 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -93,6 +93,12 @@ #define SEEK_ABSOLUTE (1 << 0) #define SEEK_FACTOR (1 << 1) +#ifdef USE_LIBAVCODEC +#include "libavcodec/avcodec.h" +#else +#define FF_INPUT_BUFFER_PADDING_SIZE 8 +#endif + // Holds one packet/frame/whatever typedef struct demux_packet_st { int len; @@ -243,7 +249,7 @@ static inline demux_packet_t* new_demux_packet(int len){ dp->refcount=1; dp->master=NULL; dp->buffer=NULL; - if (len > 0 && (dp->buffer = (unsigned char *)malloc(len + 8))) + if (len > 0 && (dp->buffer = (unsigned char *)malloc(len + FF_INPUT_BUFFER_PADDING_SIZE))) memset(dp->buffer + len, 0, 8); else dp->len = 0; diff --git a/libmpdemux/video.c b/libmpdemux/video.c index b0f72c515f..cd061acc1c 100644 --- a/libmpdemux/video.c +++ b/libmpdemux/video.c @@ -22,12 +22,6 @@ /* sub_cc (closed captions)*/ #include "sub_cc.h" -#ifdef USE_LIBAVCODEC -#include "libavcodec/avcodec.h" -#else -#define FF_INPUT_BUFFER_PADDING_SIZE 8 -#endif - /* biCompression constant */ #define BI_RGB 0L -- cgit v1.2.3 From 4a46fcaebcf97243a5f7a24320e1871e57f2a948 Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 16 Jul 2008 16:43:40 +0000 Subject: Make sure demuxed ASF packet is properly padded after descrambling git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27302 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_asf.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'libmpdemux') diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c index d007ae1a3e..8f370c6d31 100644 --- a/libmpdemux/demux_asf.c +++ b/libmpdemux/demux_asf.c @@ -50,9 +50,12 @@ static inline int check_varlen(uint8_t *ptr, uint8_t *endptr, int len) { } static void asf_descrambling(unsigned char **src,unsigned len, struct asf_priv* asf){ - unsigned char *dst=malloc(len); + unsigned char *dst; unsigned char *s2=*src; unsigned i=0,x,y; + if (len > UINT_MAX - FF_INPUT_BUFFER_PADDING_SIZE) + return; + dst = malloc(len + FF_INPUT_BUFFER_PADDING_SIZE); while(len>=asf->scrambling_h*asf->scrambling_w*asf->scrambling_b+i){ // mp_msg(MSGT_DEMUX,MSGL_DBG4,"descrambling! (w=%d b=%d)\n",w,asf_scrambling_b); //i+=asf_scrambling_h*asf_scrambling_w; -- cgit v1.2.3 From 2f5b26277f88b747584c017e696bad1eda50ef77 Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 16 Jul 2008 17:28:19 +0000 Subject: 100l, fix calloc being called with the wrong argument due to reordering two lines in SVN r27263 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27303 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_mov.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libmpdemux') diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c index b117a3f00d..613b4548b2 100644 --- a/libmpdemux/demux_mov.c +++ b/libmpdemux/demux_mov.c @@ -1887,7 +1887,7 @@ static int lschunks_intrak(demuxer_t* demuxer, int level, unsigned int id, "MOV: %*sEdit list table (%d entries) (ver:%d,flags:%d)\n", level, "", entries, ver, flags); #if 1 - trak->editlist = calloc(trak->editlist_size, sizeof(mov_editlist_t)); + trak->editlist = calloc(entries, sizeof(mov_editlist_t)); trak->editlist_size = trak->editlist ? entries : 0; for (i = 0; i < trak->editlist_size; i++) { int dur = stream_read_dword(demuxer->stream); -- cgit v1.2.3 From b422b105d7767fbb40aad7b81b34aa033a168057 Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 16 Jul 2008 17:48:34 +0000 Subject: And a 1000l for r27263, swapped a condition, thus setting size to 0 when malloc succeeded instead of when it failed. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27304 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_mov.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'libmpdemux') diff --git a/libmpdemux/demux_mov.c b/libmpdemux/demux_mov.c index 613b4548b2..37de352510 100644 --- a/libmpdemux/demux_mov.c +++ b/libmpdemux/demux_mov.c @@ -1751,7 +1751,7 @@ static int lschunks_intrak(demuxer_t* demuxer, int level, unsigned int id, "MOV: %*sSample duration table! (%d blocks)\n", level, "", len); trak->durmap = calloc(len, sizeof(mov_durmap_t)); - trak->durmap_size = trak->durmap ? 0 : len; + trak->durmap_size = trak->durmap ? len : 0; for (i = 0; i < trak->durmap_size; i++) { trak->durmap[i].num = stream_read_dword(demuxer->stream); trak->durmap[i].dur = stream_read_dword(demuxer->stream); -- cgit v1.2.3 From 9254d010eaf72973716e3e254376172858b64db5 Mon Sep 17 00:00:00 2001 From: reimar Date: Wed, 16 Jul 2008 18:51:39 +0000 Subject: limits.h is required for UINT_MAX git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27305 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_asf.c | 1 + 1 file changed, 1 insertion(+) (limited to 'libmpdemux') diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c index 8f370c6d31..3dc18d920c 100644 --- a/libmpdemux/demux_asf.c +++ b/libmpdemux/demux_asf.c @@ -3,6 +3,7 @@ #include #include #include +#include #include "config.h" #include "mp_msg.h" -- cgit v1.2.3 From 4153f4e21c26703a6cc68ed33be9f90365788816 Mon Sep 17 00:00:00 2001 From: reimar Date: Thu, 17 Jul 2008 17:14:12 +0000 Subject: Avoid including avcodec.h in demuxer.h (and thus many other files) just to get FF_INPUT_BUFFER_PADDING_SIZE. Instead use MP_INPUT_BUFFER_PADDING_SIZE and add a preprocessor check that it is big enough. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@27314 b3059339-0415-0410-9bf9-f77b7e298cf2 --- libmpdemux/demux_asf.c | 8 ++++---- libmpdemux/demux_real.c | 4 ++-- libmpdemux/demux_viv.c | 6 +++--- libmpdemux/demuxer.c | 7 +++++++ libmpdemux/demuxer.h | 8 ++------ libmpdemux/video.c | 16 ++++++++-------- 6 files changed, 26 insertions(+), 23 deletions(-) (limited to 'libmpdemux') diff --git a/libmpdemux/demux_asf.c b/libmpdemux/demux_asf.c index 3dc18d920c..518d08d220 100644 --- a/libmpdemux/demux_asf.c +++ b/libmpdemux/demux_asf.c @@ -54,9 +54,9 @@ static void asf_descrambling(unsigned char **src,unsigned len, struct asf_priv* unsigned char *dst; unsigned char *s2=*src; unsigned i=0,x,y; - if (len > UINT_MAX - FF_INPUT_BUFFER_PADDING_SIZE) + if (len > UINT_MAX - MP_INPUT_BUFFER_PADDING_SIZE) return; - dst = malloc(len + FF_INPUT_BUFFER_PADDING_SIZE); + dst = malloc(len + MP_INPUT_BUFFER_PADDING_SIZE); while(len>=asf->scrambling_h*asf->scrambling_w*asf->scrambling_b+i){ // mp_msg(MSGT_DEMUX,MSGL_DBG4,"descrambling! (w=%d b=%d)\n",w,asf_scrambling_b); //i+=asf_scrambling_h*asf_scrambling_w; @@ -86,9 +86,9 @@ static void init_priv (struct asf_priv* asf){ static void demux_asf_append_to_packet(demux_packet_t* dp,unsigned char *data,int len,int offs) { if(dp->len!=offs && offs!=-1) mp_msg(MSGT_DEMUX,MSGL_V,"warning! fragment.len=%d BUT next fragment offset=%d \n",dp->len,offs); - dp->buffer=realloc(dp->buffer,dp->len+len+FF_INPUT_BUFFER_PADDING_SIZE); + dp->buffer=realloc(dp->buffer,dp->len+len+MP_INPUT_BUFFER_PADDING_SIZE); fast_memcpy(dp->buffer+dp->len,data,len); - memset(dp->buffer+dp->len+len, 0, FF_INPUT_BUFFER_PADDING_SIZE); + memset(dp->buffer+dp->len+len, 0, MP_INPUT_BUFFER_PADDING_SIZE); mp_dbg(MSGT_DEMUX,MSGL_DBG4,"data appended! %d+%d\n",dp->len,len); dp->len+=len; } diff --git a/libmpdemux/demux_real.c b/libmpdemux/demux_real.c index 3490501302..7de8611ec0 100644 --- a/libmpdemux/demux_real.c +++ b/libmpdemux/demux_real.c @@ -934,8 +934,8 @@ got_video: // increase buffer size, this should not happen! mp_msg(MSGT_DEMUX,MSGL_WARN, "chunktab buffer too small!!!!!\n"); dp->len=dp_hdr->chunktab+8*(4+dp_hdr->chunks); - dp->buffer=realloc(dp->buffer,dp->len+FF_INPUT_BUFFER_PADDING_SIZE); - memset(dp->buffer + dp->len, 0, FF_INPUT_BUFFER_PADDING_SIZE); + dp->buffer=realloc(dp->buffer,dp->len+MP_INPUT_BUFFER_PADDING_SIZE); + memset(dp->buffer + dp->len, 0, MP_INPUT_BUFFER_PADDING_SIZE); // re-calc pointers: dp_hdr=(dp_hdr_t*)dp->buffer; dp_data=dp->buffer+sizeof(dp_hdr_t); diff --git a/libmpdemux/demux_viv.c b/libmpdemux/demux_viv.c index 7ee2332e27..489ccaaf19 100644 --- a/libmpdemux/demux_viv.c +++ b/libmpdemux/demux_viv.c @@ -378,10 +378,10 @@ static int demux_vivo_fill_buffer(demuxer_t *demux, demux_stream_t *dsds){ } else { // append data to it! demux_packet_t* dp=ds->asf_packet; - if(dp->len + len + FF_INPUT_BUFFER_PADDING_SIZE < 0) + if(dp->len + len + MP_INPUT_BUFFER_PADDING_SIZE < 0) return 0; - dp->buffer=realloc(dp->buffer,dp->len+len+FF_INPUT_BUFFER_PADDING_SIZE); - memset(dp->buffer+dp->len+len, 0, FF_INPUT_BUFFER_PADDING_SIZE); + dp->buffer=realloc(dp->buffer,dp->len+len+MP_INPUT_BUFFER_PADDING_SIZE); + memset(dp->buffer+dp->len+len, 0, MP_INPUT_BUFFER_PADDING_SIZE); //memcpy(dp->buffer+dp->len,data,len); stream_read(demux->stream,dp->buffer+dp->len,len); mp_dbg(MSGT_DEMUX,MSGL_DBG4,"data appended! %d+%d\n",dp->len,len); diff --git a/libmpdemux/demuxer.c b/libmpdemux/demuxer.c index afa9d4fdcc..6d51b434e8 100644 --- a/libmpdemux/demuxer.c +++ b/libmpdemux/demuxer.c @@ -27,6 +27,13 @@ #include "libass/ass_mp.h" #endif +#ifdef USE_LIBAVCODEC +#include "libavcodec/avcodec.h" +#if MP_INPUT_BUFFER_PADDING_SIZE < FF_INPUT_BUFFER_PADDING_SIZE +#error MP_INPUT_BUFFER_PADDING_SIZE is too small! +#endif +#endif + extern void resync_video_stream(sh_video_t *sh_video); extern void resync_audio_stream(sh_audio_t *sh_audio); diff --git a/libmpdemux/demuxer.h b/libmpdemux/demuxer.h index 76942a3aed..8cea2ace78 100644 --- a/libmpdemux/demuxer.h +++ b/libmpdemux/demuxer.h @@ -93,11 +93,7 @@ #define SEEK_ABSOLUTE (1 << 0) #define SEEK_FACTOR (1 << 1) -#ifdef USE_LIBAVCODEC -#include "libavcodec/avcodec.h" -#else -#define FF_INPUT_BUFFER_PADDING_SIZE 8 -#endif +#define MP_INPUT_BUFFER_PADDING_SIZE 8 // Holds one packet/frame/whatever typedef struct demux_packet_st { @@ -249,7 +245,7 @@ static inline demux_packet_t* new_demux_packet(int len){ dp->refcount=1; dp->master=NULL; dp->buffer=NULL; - if (len > 0 && (dp->buffer = (unsigned char *)malloc(len + FF_INPUT_BUFFER_PADDING_SIZE))) + if (len > 0 && (dp->buffer = (unsigned char *)malloc(len + MP_INPUT_BUFFER_PADDING_SIZE))) memset(dp->buffer + len, 0, 8); else dp->len = 0; diff --git a/libmpdemux/video.c b/libmpdemux/video.c index cd061acc1c..95348a8efa 100644 --- a/libmpdemux/video.c +++ b/libmpdemux/video.c @@ -111,8 +111,8 @@ switch(video_codec){ } mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); if(!videobuffer) { - videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); - if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE); + videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + MP_INPUT_BUFFER_PADDING_SIZE); + if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, MP_INPUT_BUFFER_PADDING_SIZE); else { mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); return 0; @@ -204,8 +204,8 @@ switch(video_codec){ } mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); if(!videobuffer) { - videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); - if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE); + videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + MP_INPUT_BUFFER_PADDING_SIZE); + if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, MP_INPUT_BUFFER_PADDING_SIZE); else { mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); return 0; @@ -267,8 +267,8 @@ mpeg_header_parser: mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); // ========= Read & process sequence header & extension ============ if(!videobuffer) { - videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); - if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE); + videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + MP_INPUT_BUFFER_PADDING_SIZE); + if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, MP_INPUT_BUFFER_PADDING_SIZE); else { mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); return 0; @@ -335,8 +335,8 @@ mpeg_header_parser: } mp_msg(MSGT_DECVIDEO,MSGL_INFO,"found\n"); if(!videobuffer) { - videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + FF_INPUT_BUFFER_PADDING_SIZE); - if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE); + videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE + MP_INPUT_BUFFER_PADDING_SIZE); + if (videobuffer) memset(videobuffer+VIDEOBUFFER_SIZE, 0, MP_INPUT_BUFFER_PADDING_SIZE); else { mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); return 0; -- cgit v1.2.3