[Mplayerxp-cvslog] SF.net SVN: mplayerxp:[522] mplayerxp
Brought to you by:
olov
From: <nic...@us...> - 2012-12-08 09:18:01
|
Revision: 522 http://mplayerxp.svn.sourceforge.net/mplayerxp/?rev=522&view=rev Author: nickols_k Date: 2012-12-08 09:17:54 +0000 (Sat, 08 Dec 2012) Log Message: ----------- security patch: more private data for struct Stream and make it independed from Demuxer* and networking_t* Modified Paths: -------------- mplayerxp/libmpdemux/demux_asf.cpp mplayerxp/libmpdemux/demux_rawaudio.cpp mplayerxp/libmpdemux/demux_rawvideo.cpp mplayerxp/libmpdemux/demuxer.cpp mplayerxp/libmpstream/cache2.cpp mplayerxp/libmpstream/stream.cpp mplayerxp/libmpstream/stream.h mplayerxp/mplayerxp.cpp Modified: mplayerxp/libmpdemux/demux_asf.cpp =================================================================== --- mplayerxp/libmpdemux/demux_asf.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpdemux/demux_asf.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -333,14 +333,6 @@ if(streams) { uint32_t vr = 0, ar = 0,i; -#ifdef HAVE_STREAMING - if( demuxer->stream->networking!=NULL ) { - if( demuxer->stream->networking->bandwidth!=0 && demuxer->stream->networking->data!=NULL ) { - best_audio = ((asf_http_networking_t*)demuxer->stream->networking->data)->audio_id; - best_video = ((asf_http_networking_t*)demuxer->stream->networking->data)->video_id; - } - } else -#endif for(i = 0; i < stream_count; i++) { uint32_t id = streams[2*i]; uint32_t rate = streams[2*i+1]; Modified: mplayerxp/libmpdemux/demux_rawaudio.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpdemux/demux_rawaudio.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -48,10 +48,10 @@ sh_audio_t* sh_audio; WAVEFORMATEX* w; - stream_control(demuxer->stream,SCTRL_AUD_GET_CHANNELS,&channels); - stream_control(demuxer->stream,SCTRL_AUD_GET_SAMPLERATE,&samplerate); - stream_control(demuxer->stream,SCTRL_AUD_GET_SAMPLESIZE,&samplesize); - stream_control(demuxer->stream,SCTRL_AUD_GET_FORMAT,&wtag); + demuxer->stream->ctrl(SCTRL_AUD_GET_CHANNELS,&channels); + demuxer->stream->ctrl(SCTRL_AUD_GET_SAMPLERATE,&samplerate); + demuxer->stream->ctrl(SCTRL_AUD_GET_SAMPLESIZE,&samplesize); + demuxer->stream->ctrl(SCTRL_AUD_GET_FORMAT,&wtag); sh_audio = demuxer->new_sh_audio(); sh_audio->wf = w = (WAVEFORMATEX*)mp_malloc(sizeof(WAVEFORMATEX)); w->wFormatTag = sh_audio->wtag = wtag; Modified: mplayerxp/libmpdemux/demux_rawvideo.cpp =================================================================== --- mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpdemux/demux_rawvideo.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -81,10 +81,10 @@ case 7: priv.width=1408;priv.height=1152;break; case 8: priv.width=352; priv.height=240; break; } - stream_control(demuxer->stream,SCTRL_VID_GET_WIDTH,&priv.width); - stream_control(demuxer->stream,SCTRL_VID_GET_HEIGHT,&priv.height); - stream_control(demuxer->stream,SCTRL_VID_GET_FORMAT,&priv.format); - stream_control(demuxer->stream,SCTRL_VID_GET_FPS,&priv.fps); + demuxer->stream->ctrl(SCTRL_VID_GET_WIDTH,&priv.width); + demuxer->stream->ctrl(SCTRL_VID_GET_HEIGHT,&priv.height); + demuxer->stream->ctrl(SCTRL_VID_GET_FORMAT,&priv.format); + demuxer->stream->ctrl(SCTRL_VID_GET_FPS,&priv.fps); if(!priv.width || !priv.height){ MSG_ERR("rawvideo: width or height not specified!\n"); Modified: mplayerxp/libmpdemux/demuxer.cpp =================================================================== --- mplayerxp/libmpdemux/demuxer.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpdemux/demuxer.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -356,11 +356,10 @@ for(i=0;i<sizeof(stream_txt_ids)/sizeof(struct s_stream_txt_ids);i++) if(!info().get(stream_txt_ids[i].demuxer_id)) { char stream_name[256]; - if(stream_control(stream,stream_txt_ids[i].stream_id,stream_name) == MPXP_Ok) { + if(stream->ctrl(stream_txt_ids[i].stream_id,stream_name) == MPXP_Ok) { info().add(stream_txt_ids[i].demuxer_id,stream_name); } } - stream->demuxer=this; return MPXP_Ok; } Modified: mplayerxp/libmpstream/cache2.cpp =================================================================== --- mplayerxp/libmpstream/cache2.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpstream/cache2.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -112,9 +112,9 @@ MSG_DBG2("Out of boundaries... seeking to %lli {in_cache(%i) %lli<%lli>%lli} \n" ,new_start,in_cache,START_FILEPOS(c),readpos,END_FILEPOS(c)); if(c->stream->eof() || c->eof) c->stream->reset(); - c->stream->driver->seek(new_start); + c->stream->seek(new_start); if(errno) { MSG_WARN("c2_seek(drv:%s) error: %s\n",c->stream->driver_info->mrl,strerror(errno)); errno=0; } - if((c->packets[c->first].filepos=c->stream->driver->tell())<0) seek_eof=1; + if((c->packets[c->first].filepos=c->stream->tell())<0) seek_eof=1; c->last=c->first; if(c->packets[c->first].filepos < new_start-(off_t)c->stream->sector_size()) MSG_WARN("CACHE2: found wrong offset after seeking %lli (wanted: %lli)\n",c->packets[c->first].filepos,new_start); @@ -144,8 +144,8 @@ { CACHE2_PACKET_TLOCK(cidx); c->packets[cidx].sp.len=c->sector_size; - c->packets[cidx].filepos = c->stream->driver->tell(); - c->stream->driver->read(&c->packets[cidx].sp); + c->packets[cidx].filepos = c->stream->tell(); + c->stream->read(&c->packets[cidx].sp); MSG_DBG2("CACHE2: read_packet at %lli (wanted %u got %u type %i)",c->packets[cidx].filepos,c->sector_size,c->packets[cidx].sp.len,c->packets[cidx].sp.type); if(mp_conf.verbose>1) if(c->packets[cidx].sp.len>8) { @@ -154,7 +154,7 @@ MSG_DBG2("%02X ",(int)(unsigned char)c->packets[cidx].sp.buf[i]); } MSG_DBG2("\n"); - if(stream_control(c->stream,SCTRL_EOF,NULL)==MPXP_Ok) legacy_eof=1; + if(c->stream->ctrl(SCTRL_EOF,NULL)==MPXP_Ok) legacy_eof=1; else legacy_eof=0; if(c->packets[cidx].sp.len < 0 || (c->packets[cidx].sp.len == 0 && c->packets[cidx].sp.type == 0) || legacy_eof || seek_eof) { /* EOF */ @@ -354,7 +354,7 @@ do{ c->packets[cidx].state|=CPF_EMPTY; cidx=CP_NEXT(c,cidx); }while(cidx!=c->first); c->last=c->first; c->read_filepos=c->stream->start_pos(); - c->stream->driver->seek(c->read_filepos); + c->stream->seek(c->read_filepos); } } @@ -619,11 +619,6 @@ else return nc_stream_skip(s,len); } -MPXP_Rc __FASTCALL__ stream_control(const Stream *s,unsigned cmd,any_t*param) -{ - return nc_stream_control(s,cmd,param); -} - void __FASTCALL__ stream_reset(Stream *s) { if(s->cache_data) c2_stream_reset(s->cache_data); Modified: mplayerxp/libmpstream/stream.cpp =================================================================== --- mplayerxp/libmpstream/stream.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpstream/stream.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -98,9 +98,15 @@ reset(); } +Stream::Stream(Demuxer_Stream* ds) { + _type=Stream::Type_DS; + driver=ds->demuxer->stream->driver; + priv = ds; +} + Stream::~Stream(){ MSG_INFO("\n*** free_stream(drv:%s) called [errno: %s]***\n",driver_info->mrl,strerror(errno)); - if(driver) driver->close(); + if(driver) close(); delete buffer; delete driver; } @@ -161,6 +167,11 @@ delete buffer; return MPXP_False; } +MPXP_Rc Stream::ctrl(unsigned cmd,any_t* param) { return driver->ctrl(cmd,param); } +int Stream::read(stream_packet_t * sp) { return driver->read(sp); } +off_t Stream::seek(off_t off) { return driver->seek(off); } +off_t Stream::tell() const { return driver->tell(); } +void Stream::close() { driver->close(); } void Stream::reset(){ if(_eof){ @@ -191,15 +202,15 @@ sp.type=0; sp.len=s->sector_size(); sp.buf=(char *)s->buffer; - if(s->type()==Stream::Type_DS) len = reinterpret_cast<Demuxer_Stream*>(s->priv)->read_data(s->buffer,s->sector_size()); - else { if(!s->driver) { s->eof(1); return 0; } len = s->driver->read(&sp); } + if(s->type()==Stream::Type_DS) len = reinterpret_cast<Demuxer_Stream*>(s)->read_data(s->buffer,s->sector_size()); + else len = s->read(&sp); if(sp.type) { if(s->event_handler) s->event_handler(s,&sp); continue; } - if(s->driver->ctrl(SCTRL_EOF,NULL)==MPXP_Ok) legacy_eof=1; - else legacy_eof=0; + if(s->ctrl(SCTRL_EOF,NULL)==MPXP_Ok)legacy_eof=1; + else legacy_eof=0; if(sp.len<=0 || legacy_eof) { MSG_DBG3("nc_stream_read_cbuffer: Guess EOF\n"); @@ -230,8 +241,7 @@ MSG_DBG3("nc_stream_seek_long to %llu\n",newpos); if(newpos==0 || newpos!=s->pos()) { - if(!s->driver) { s->eof(1); return 0; } - s->pos(s->driver->seek(newpos)); + s->pos(s->seek(newpos)); if(errno) { MSG_WARN("nc_stream_seek(drv:%s) error: %s\n",s->driver_info->mrl,strerror(errno)); errno=0; } } MSG_DBG3("nc_stream_seek_long after: %llu\n",s->pos()); @@ -275,14 +285,6 @@ return s; } -Stream* __FASTCALL__ new_ds_stream(Demuxer_Stream *ds) { - Stream* s = new(zeromem) Stream(Stream::Type_DS); - s->driver=ds->demuxer->stream->driver; - s->priv = ds; - check_pin("stream",ds->pin,DS_PIN); - return s; -} - int __FASTCALL__ nc_stream_read_char(Stream *s) { unsigned char retval; @@ -411,7 +413,4 @@ return 1; } -MPXP_Rc __FASTCALL__ nc_stream_control(const Stream *s,unsigned cmd,any_t*param) { - return s->driver->ctrl(cmd,param); -} } //namespace mpxp Modified: mplayerxp/libmpstream/stream.h =================================================================== --- mplayerxp/libmpstream/stream.h 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/libmpstream/stream.h 2012-12-08 09:17:54 UTC (rev 522) @@ -39,7 +39,7 @@ }; struct cache_vars_s; - struct Demuxer; + class Demuxer_Stream; class Stream_Interface; struct stream_interface_info_t; /** Stream description */ @@ -58,40 +58,43 @@ Type_Menu =0x00000100, /**< Stream contains DVD menu... */ }; Stream(type_e type=Stream::Type_Unknown); + Stream(Demuxer_Stream* ds); virtual ~Stream(); - MPXP_Rc open(libinput_t*libinput,const char* filename,int* file_format,stream_callback event_handler); - void reset(); - void type(type_e);/**< assign new propertie for the stream (see STREAMTYPE_ for detail) */ - type_e type(); /**< properties of the stream (see STREAMTYPE_ for detail) */ - off_t pos() const; /**< SOF offset from begin of stream */ - void pos(off_t); /**< SOF offset from begin of stream */ - int eof() const; /**< indicates EOF */ - void eof(int); /**< set EOF */ - off_t start_pos() const; /**< real start of stream (without internet's headers) */ - off_t end_pos() const; /**< real end of stream (media may be not fully filled) */ - unsigned sector_size() const; /**< alignment of read operations (1 for file, VCD_SECTOR_SIZE for VCDs) */ - float stream_pts() const; /**< PTS correction for idiotics DVD's discontinuities */ + virtual MPXP_Rc open(libinput_t*libinput,const char* filename,int* file_format,stream_callback event_handler); + virtual int read(stream_packet_t * sp); + virtual off_t seek(off_t off); + virtual off_t tell() const; + virtual void close(); + virtual MPXP_Rc ctrl(unsigned cmd,any_t* param); + virtual void reset(); + virtual void type(type_e);/**< assign new propertie for the stream (see STREAMTYPE_ for detail) */ + virtual type_e type(); /**< properties of the stream (see STREAMTYPE_ for detail) */ + virtual off_t pos() const; /**< SOF offset from begin of stream */ + virtual void pos(off_t); /**< SOF offset from begin of stream */ + virtual int eof() const; /**< indicates EOF */ + virtual void eof(int); /**< set EOF */ + virtual off_t start_pos() const; /**< real start of stream (without internet's headers) */ + virtual off_t end_pos() const; /**< real end of stream (media may be not fully filled) */ + virtual unsigned sector_size() const; /**< alignment of read operations (1 for file, VCD_SECTOR_SIZE for VCDs) */ + virtual float stream_pts() const; /**< PTS correction for idiotics DVD's discontinuities */ + char antiviral_hole[RND_CHAR3]; unsigned pin; /**< personal identification number */ int file_format; /**< detected file format (by http:// protocol for example) */ unsigned int buf_pos; /**< position whitin of small cache */ unsigned int buf_len; /**< length of small cache */ unsigned char* buffer;/**< buffer of small cache */ - Demuxer* demuxer; /* parent demuxer */ struct cache_vars_s*cache_data; /**< large cache */ - Opaque* priv; /**< private data used by stream driver */ -#ifdef HAVE_STREAMING - networking_t* networking; /**< callback for internet networking control */ -#endif - Stream_Interface *driver; /**< low-level stream driver */ const stream_interface_info_t* driver_info; stream_callback event_handler; /**< callback for streams which provide events */ private: - type_e _type; - off_t _pos; /**< SOF offset from begin of stream */ - int _eof; /**< indicates EOF */ + Stream_Interface* driver; /**< low-level stream driver */ + Opaque* priv; /**< private data used by stream driver */ + type_e _type; + off_t _pos; /**< SOF offset from begin of stream */ + int _eof; /**< indicates EOF */ }; inline Stream::type_e operator~(Stream::type_e a) { return static_cast<Stream::type_e>(~static_cast<unsigned>(a)); } inline Stream::type_e operator|(Stream::type_e a, Stream::type_e b) { return static_cast<Stream::type_e>(static_cast<unsigned>(a)|static_cast<unsigned>(b)); } @@ -113,8 +116,6 @@ extern int __FASTCALL__ nc_stream_seek(Stream *s,off_t pos); extern int __FASTCALL__ nc_stream_skip(Stream *s,off_t len); - extern MPXP_Rc __FASTCALL__ nc_stream_control(const Stream *s,unsigned cmd,any_t*param); - /* this block describes interface to cache/non-cache stream functions */ extern int __FASTCALL__ stream_read_char(Stream *s); extern int __FASTCALL__ stream_read(Stream *s,any_t* mem,int total); @@ -123,7 +124,6 @@ extern int __FASTCALL__ stream_skip(Stream *s,off_t len); extern int __FASTCALL__ stream_eof(Stream *s); extern void __FASTCALL__ stream_set_eof(Stream *s,int eof); - extern MPXP_Rc __FASTCALL__ stream_control(const Stream *s,unsigned cmd,any_t*param); void __FASTCALL__ stream_reset(Stream *s); Stream* __FASTCALL__ new_memory_stream(const unsigned char* data,int len); Modified: mplayerxp/mplayerxp.cpp =================================================================== --- mplayerxp/mplayerxp.cpp 2012-12-08 08:35:38 UTC (rev 521) +++ mplayerxp/mplayerxp.cpp 2012-12-08 09:17:54 UTC (rev 522) @@ -793,7 +793,7 @@ static void __FASTCALL__ mpxp_stream_event_handler(Stream *s,const stream_packet_t *sp) { - stream_control(s,SCRTL_EVT_HANDLE,(any_t*)sp); + s->ctrl(SCRTL_EVT_HANDLE,(any_t*)sp); } static void init_benchmark(void) @@ -1007,7 +1007,7 @@ if(mp_conf.audio_lang) { lang=new char [std::max(strlen(mp_conf.audio_lang)+1,size_t(4))]; strcpy(lang,mp_conf.audio_lang); - if(mp_conf.audio_id==-1 && stream_control(stream,SCTRL_LNG_GET_AID,lang)==MPXP_Ok) { + if(mp_conf.audio_id==-1 && stream->ctrl(SCTRL_LNG_GET_AID,lang)==MPXP_Ok) { mp_conf.audio_id=*(int *)lang; } delete lang; @@ -1015,7 +1015,7 @@ if(mp_conf.dvdsub_lang) { lang=new char [std::max(strlen(mp_conf.dvdsub_lang)+1,size_t(4))]; strcpy(lang,mp_conf.dvdsub_lang); - if(mp_conf.dvdsub_id==-1 && stream_control(stream,SCTRL_LNG_GET_SID,lang)==MPXP_Ok) { + if(mp_conf.dvdsub_id==-1 && stream->ctrl(SCTRL_LNG_GET_SID,lang)==MPXP_Ok) { mp_conf.dvdsub_id=*(int *)lang; } delete lang; @@ -1089,7 +1089,7 @@ if (mpxp_context().video().output->spudec==NULL) { unsigned *pal; MP_UNIT("spudec_init"); - if(stream_control(stream,SCTRL_VID_GET_PALETTE,&pal)==MPXP_Ok) + if(stream->ctrl(SCTRL_VID_GET_PALETTE,&pal)==MPXP_Ok) mpxp_context().video().output->spudec=spudec_new_scaled(pal,sh_video->src_w, sh_video->src_h); } @@ -1351,7 +1351,7 @@ #ifdef USE_OSD int MPXPSystem::paint_osd(int* osd_visible,int* in_pause) { - const Stream* stream=_demuxer->stream; + Stream* stream=_demuxer->stream; sh_audio_t* sh_audio=reinterpret_cast<sh_audio_t*>(_demuxer->audio->sh); sh_video_t* sh_video=reinterpret_cast<sh_video_t*>(_demuxer->video->sh); int rc=0; @@ -1365,7 +1365,7 @@ } if(osd_function==OSD_DVDMENU) { rect_highlight_t hl; - if(stream_control(stream,SCTRL_VID_GET_HILIGHT,&hl)==MPXP_Ok) { + if(stream->ctrl(SCTRL_VID_GET_HILIGHT,&hl)==MPXP_Ok) { osd_set_nav_box (hl.sx, hl.sy, hl.ex, hl.ey); MSG_V("Set nav box: %i %i %i %i\n",hl.sx, hl.sy, hl.ex, hl.ey); vo_osd_changed (OSDTYPE_DVDNAV); @@ -1603,10 +1603,10 @@ else cmd->id=MP_CMD_TV_STEP_CHANNEL_DOWN; case MP_CMD_TV_STEP_NORM: case MP_CMD_TV_STEP_CHANNEL_LIST: - stream_control(stream,SCRTL_MPXP_CMD,(any_t*)cmd->id); + stream->ctrl(SCRTL_MPXP_CMD,(any_t*)cmd->id); break; case MP_CMD_DVDNAV: - if(stream_control(stream,SCRTL_MPXP_CMD,(any_t*)cmd->args[0].v.i)==MPXP_Ok) { + if(stream->ctrl(SCRTL_MPXP_CMD,(any_t*)cmd->args[0].v.i)==MPXP_Ok) { if(cmd->args[0].v.i!=MP_CMD_DVDNAV_SELECT) { stream->type(Stream::Type_Menu); state->need_repaint=1; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |