vlc | branch: master | Rémi Denis-Courmont <r...@remlab.net> | Sat Mar 24 13:01:54 2018 +0200| [eb171844342b4d948eb29c7e3b2c866d45200381] | committer: Rémi Denis-Courmont
access_demux: check that ES output is non-NULL A combined access-demux cannot be instantiated without an ES output. This checks that the ES output is present, avoiding crashes for instance with vlc_stream_NewURL(). > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=eb171844342b4d948eb29c7e3b2c866d45200381 --- modules/access/alsa.c | 4 ++++ modules/access/avcapture.m | 3 +++ modules/access/bluray.c | 2 +- modules/access/cdda.c | 3 +++ modules/access/dc1394.c | 3 +++ modules/access/dcp/dcp.cpp | 2 +- modules/access/decklink.cpp | 3 +++ modules/access/dshow/dshow.cpp | 3 +++ modules/access/dvdnav.c | 3 +++ modules/access/dvdread.c | 3 +++ modules/access/imem.c | 3 +++ modules/access/jack.c | 3 +++ modules/access/linsys/linsys_hdsdi.c | 3 +++ modules/access/linsys/linsys_sdi.c | 3 +++ modules/access/live555.cpp | 3 +++ modules/access/oss.c | 3 +++ modules/access/pulse.c | 3 +++ modules/access/qtsound.m | 3 +++ modules/access/rdp.c | 3 +++ modules/access/rtp/rtp.c | 3 +++ modules/access/screen/screen.c | 3 +++ modules/access/screen/wayland.c | 3 +++ modules/access/screen/xcb.c | 4 +++- modules/access/shm.c | 3 +++ modules/access/timecode.c | 4 +++- modules/access/v4l2/demux.c | 2 ++ modules/access/v4l2/radio.c | 2 ++ modules/access/vnc.c | 3 +++ modules/access/wasapi.c | 3 +++ 29 files changed, 82 insertions(+), 4 deletions(-) diff --git a/modules/access/alsa.c b/modules/access/alsa.c index 69777788b6..5cc0768de8 100644 --- a/modules/access/alsa.c +++ b/modules/access/alsa.c @@ -341,6 +341,10 @@ static uint16_t channel_maps[] = { static int Open (vlc_object_t *obj) { demux_t *demux = (demux_t *)obj; + + if (demux->out == NULL) + return VLC_EGENERIC; + demux_sys_t *sys = vlc_obj_malloc(obj, sizeof (*sys)); if (unlikely(sys == NULL)) return VLC_ENOMEM; diff --git a/modules/access/avcapture.m b/modules/access/avcapture.m index 30b9c199ef..278e7f8e94 100644 --- a/modules/access/avcapture.m +++ b/modules/access/avcapture.m @@ -257,6 +257,9 @@ static int Open(vlc_object_t *p_this) char *psz_uid = NULL; + if (p_demux->out == NULL) + return VLC_EGENERIC; + @autoreleasepool { if (p_demux->psz_location && *p_demux->psz_location) psz_uid = strdup(p_demux->psz_location); diff --git a/modules/access/bluray.c b/modules/access/bluray.c index 126acb7d44..cf4676a302 100644 --- a/modules/access/bluray.c +++ b/modules/access/bluray.c @@ -632,7 +632,7 @@ static int blurayOpen(vlc_object_t *object) const char *error_msg = NULL; #define BLURAY_ERROR(s) do { error_msg = s; goto error; } while(0) - if (unlikely(!p_demux->p_input)) + if (p_demux->out == NULL || unlikely(p_demux->p_input == NULL)) return VLC_EGENERIC; forced = !strncasecmp(p_demux->psz_url, "bluray:", 7); diff --git a/modules/access/cdda.c b/modules/access/cdda.c index 6a6815df24..384dfb03a4 100644 --- a/modules/access/cdda.c +++ b/modules/access/cdda.c @@ -217,6 +217,9 @@ static int DemuxOpen(vlc_object_t *obj) demux_t *demux = (demux_t *)obj; unsigned track; + if (demux->out == NULL) + return VLC_EGENERIC; + vcddev_t *dev = DiscOpen(obj, demux->psz_location, demux->psz_filepath, &track); if (dev == NULL) diff --git a/modules/access/dc1394.c b/modules/access/dc1394.c index cf523fbf3c..631abf6f9b 100644 --- a/modules/access/dc1394.c +++ b/modules/access/dc1394.c @@ -166,6 +166,9 @@ static int Open( vlc_object_t *p_this ) es_format_t fmt; dc1394error_t res; + if (p_demux->out == NULL) + return VLC_EGENERIC; + /* Set up p_demux */ p_demux->pf_demux = Demux; p_demux->pf_control = Control; diff --git a/modules/access/dcp/dcp.cpp b/modules/access/dcp/dcp.cpp index b1b846522c..e53813beb3 100644 --- a/modules/access/dcp/dcp.cpp +++ b/modules/access/dcp/dcp.cpp @@ -306,7 +306,7 @@ static int Open( vlc_object_t *obj ) es_format_t video_format, audio_format; int retval; - if( !p_demux->psz_filepath ) + if( p_demux->out == NULL || p_demux->psz_filepath == NULL ) return VLC_EGENERIC; p_sys = new ( nothrow ) demux_sys_t(); diff --git a/modules/access/decklink.cpp b/modules/access/decklink.cpp index 5d54b15d87..761396c75a 100644 --- a/modules/access/decklink.cpp +++ b/modules/access/decklink.cpp @@ -487,6 +487,9 @@ static int Open(vlc_object_t *p_this) int rate; BMDVideoInputFlags flags = bmdVideoInputFlagDefault; + if (demux->out == NULL) + return VLC_EGENERIC; + /* Set up demux */ demux->pf_demux = NULL; demux->pf_control = Control; diff --git a/modules/access/dshow/dshow.cpp b/modules/access/dshow/dshow.cpp index ef615e6628..100d9b9a65 100644 --- a/modules/access/dshow/dshow.cpp +++ b/modules/access/dshow/dshow.cpp @@ -670,6 +670,9 @@ static int DemuxOpen( vlc_object_t *p_this ) demux_t *p_demux = (demux_t *)p_this; access_sys_t *p_sys; + if (p_demux->out == NULL) + return VLC_EGENERIC; + p_sys = (access_sys_t*)calloc( 1, sizeof( access_sys_t ) ); if( !p_sys ) return VLC_ENOMEM; diff --git a/modules/access/dvdnav.c b/modules/access/dvdnav.c index c21fe826b0..b6fe4304c3 100644 --- a/modules/access/dvdnav.c +++ b/modules/access/dvdnav.c @@ -349,6 +349,9 @@ static int AccessDemuxOpen ( vlc_object_t *p_this ) int i_ret = VLC_EGENERIC; bool forced = false; + if (p_demux->out == NULL) + return VLC_EGENERIC; + if( !strncasecmp(p_demux->psz_url, "dvd", 3) ) forced = true; diff --git a/modules/access/dvdread.c b/modules/access/dvdread.c index bd708d99af..8bf626298a 100644 --- a/modules/access/dvdread.c +++ b/modules/access/dvdread.c @@ -169,6 +169,9 @@ static int Open( vlc_object_t *p_this ) char *psz_file; ifo_handle_t *p_vmg_file; + if (p_demux->out == NULL) + return VLC_EGENERIC; + if( !p_demux->psz_filepath || !*p_demux->psz_filepath ) psz_file = var_InheritString( p_this, "dvd" ); else diff --git a/modules/access/imem.c b/modules/access/imem.c index d98c5f3d08..668b0e5000 100644 --- a/modules/access/imem.c +++ b/modules/access/imem.c @@ -416,6 +416,9 @@ static int OpenDemux(vlc_object_t *object) demux_t *demux = (demux_t *)object; imem_sys_t *sys; + if (demux->out == NULL) + return VLC_EGENERIC; + if (OpenCommon(object, &sys, demux->psz_location)) return VLC_EGENERIC; diff --git a/modules/access/jack.c b/modules/access/jack.c index 3ef6028719..4a066e32ec 100644 --- a/modules/access/jack.c +++ b/modules/access/jack.c @@ -127,6 +127,9 @@ static int Open( vlc_object_t *p_this ) es_format_t fmt; int i_out_ports = 0; + if (p_demux->out == NULL) + return VLC_EGENERIC; + p_demux->pf_demux = Demux; p_demux->pf_control = Control; diff --git a/modules/access/linsys/linsys_hdsdi.c b/modules/access/linsys/linsys_hdsdi.c index a9573ba714..9924290a99 100644 --- a/modules/access/linsys/linsys_hdsdi.c +++ b/modules/access/linsys/linsys_hdsdi.c @@ -175,6 +175,9 @@ static int Open( vlc_object_t *p_this ) demux_sys_t *p_sys; char *psz_parser; + if (p_demux->out == NULL) + return VLC_EGENERIC; + /* Fill p_demux field */ p_demux->p_sys = p_sys = calloc( 1, sizeof( demux_sys_t ) ); if( unlikely(!p_sys) ) diff --git a/modules/access/linsys/linsys_sdi.c b/modules/access/linsys/linsys_sdi.c index 86616806fd..9c544d1003 100644 --- a/modules/access/linsys/linsys_sdi.c +++ b/modules/access/linsys/linsys_sdi.c @@ -212,6 +212,9 @@ static int DemuxOpen( vlc_object_t *p_this ) demux_sys_t *p_sys; char *psz_parser; + if (p_demux->out == NULL) + return VLC_EGENERIC; + /* Fill p_demux field */ p_demux->pf_demux = DemuxDemux; p_demux->pf_control = DemuxControl; diff --git a/modules/access/live555.cpp b/modules/access/live555.cpp index e7b7a83090..b2c32867e8 100644 --- a/modules/access/live555.cpp +++ b/modules/access/live555.cpp @@ -300,6 +300,9 @@ static int Open ( vlc_object_t *p_this ) int i_return; int i_error = VLC_EGENERIC; + if (p_demux->out == NULL) + return VLC_EGENERIC; + /* if the rtsp URL may contain a sat.ip fake DNS, bail-out early and * let the SAT>IP module handle that */ if( !strncmp(p_demux->psz_location, "sat.ip", 6) ) diff --git a/modules/access/oss.c b/modules/access/oss.c index 477b1c64cd..367aed1574 100644 --- a/modules/access/oss.c +++ b/modules/access/oss.c @@ -152,6 +152,9 @@ static int DemuxOpen( vlc_object_t *p_this ) demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys; + if (p_demux->out == NULL) + return VLC_EGENERIC; + /* Set up p_demux */ p_demux->pf_control = DemuxControl; p_demux->pf_demux = Demux; diff --git a/modules/access/pulse.c b/modules/access/pulse.c index 4ad7477374..4f75e2f660 100644 --- a/modules/access/pulse.c +++ b/modules/access/pulse.c @@ -255,6 +255,9 @@ static int Open(vlc_object_t *obj) { demux_t *demux = (demux_t *)obj; + if (demux->out == NULL) + return VLC_EGENERIC; + demux_sys_t *sys = vlc_obj_malloc(obj, sizeof (*sys)); if (unlikely(sys == NULL)) return VLC_ENOMEM; diff --git a/modules/access/qtsound.m b/modules/access/qtsound.m index 9c26ebb217..82a1c03269 100644 --- a/modules/access/qtsound.m +++ b/modules/access/qtsound.m @@ -244,6 +244,9 @@ static int Open(vlc_object_t *p_this) QTCaptureDeviceInput *audioInput; NSError *o_returnedAudioError; + if (p_demux->out == NULL) + return VLC_EGENERIC; + @autoreleasepool { if(p_demux->psz_location && *p_demux->psz_location) psz_uid = p_demux->psz_location; diff --git a/modules/access/rdp.c b/modules/access/rdp.c index 7e6be4c1fd..afb29c671f 100644 --- a/modules/access/rdp.c +++ b/modules/access/rdp.c @@ -426,6 +426,9 @@ static int Open( vlc_object_t *p_this ) demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys; + if (p_demux->out == NULL) + return VLC_EGENERIC; + p_sys = vlc_obj_calloc( p_this, 1, sizeof(demux_sys_t) ); if( !p_sys ) return VLC_ENOMEM; diff --git a/modules/access/rtp/rtp.c b/modules/access/rtp/rtp.c index 48a2b4bc19..136600cb02 100644 --- a/modules/access/rtp/rtp.c +++ b/modules/access/rtp/rtp.c @@ -162,6 +162,9 @@ static int Open (vlc_object_t *obj) demux_t *demux = (demux_t *)obj; int tp; /* transport protocol */ + if (demux->out == NULL) + return VLC_EGENERIC; + if (!strcasecmp(demux->psz_name, "dccp")) tp = IPPROTO_DCCP; else diff --git a/modules/access/screen/screen.c b/modules/access/screen/screen.c index 59eaaa6eca..a3a267c729 100644 --- a/modules/access/screen/screen.c +++ b/modules/access/screen/screen.c @@ -144,6 +144,9 @@ static int Open( vlc_object_t *p_this ) demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys; + if (p_demux->out == NULL) + return VLC_EGENERIC; + /* Fill p_demux field */ p_demux->pf_demux = Demux; p_demux->pf_control = Control; diff --git a/modules/access/screen/wayland.c b/modules/access/screen/wayland.c index 1e6c178144..28b658984e 100644 --- a/modules/access/screen/wayland.c +++ b/modules/access/screen/wayland.c @@ -358,6 +358,9 @@ static const struct wl_registry_listener registry_cbs = static int Open(vlc_object_t *obj) { demux_t *demux = (demux_t *)obj; + if (demux->out == NULL) + return VLC_EGENERIC; + demux_sys_t *sys = malloc(sizeof (*sys)); if (unlikely(sys == NULL)) return VLC_ENOMEM; diff --git a/modules/access/screen/xcb.c b/modules/access/screen/xcb.c index 4833030c3b..eb2219a1b2 100644 --- a/modules/access/screen/xcb.c +++ b/modules/access/screen/xcb.c @@ -142,8 +142,10 @@ static bool CheckSHM (xcb_connection_t *conn) static int Open (vlc_object_t *obj) { demux_t *demux = (demux_t *)obj; - demux_sys_t *p_sys = malloc (sizeof (*p_sys)); + if (demux->out == NULL) + return VLC_EGENERIC; + demux_sys_t *p_sys = malloc (sizeof (*p_sys)); if (p_sys == NULL) return VLC_ENOMEM; demux->p_sys = p_sys; diff --git a/modules/access/shm.c b/modules/access/shm.c index ecbf0860a3..de6853684d 100644 --- a/modules/access/shm.c +++ b/modules/access/shm.c @@ -138,6 +138,9 @@ struct demux_sys_t static int Open (vlc_object_t *obj) { demux_t *demux = (demux_t *)obj; + if (demux->out == NULL) + return VLC_EGENERIC; + demux_sys_t *sys = vlc_obj_malloc(obj, sizeof (*sys)); if (unlikely(sys == NULL)) return VLC_ENOMEM; diff --git a/modules/access/timecode.c b/modules/access/timecode.c index 3f962c5dce..c80852c1f1 100644 --- a/modules/access/timecode.c +++ b/modules/access/timecode.c @@ -167,8 +167,10 @@ static int Control (demux_t *demux, int query, va_list args) static int Open (vlc_object_t *obj) { demux_t *demux = (demux_t *)obj; - demux_sys_t *sys = vlc_obj_malloc(obj, sizeof (*sys)); + if (demux->out == NULL) + return VLC_EGENERIC; + demux_sys_t *sys = vlc_obj_malloc(obj, sizeof (*sys)); if (unlikely(sys == NULL)) return VLC_ENOMEM; diff --git a/modules/access/v4l2/demux.c b/modules/access/v4l2/demux.c index e7637fb307..c30b16373f 100644 --- a/modules/access/v4l2/demux.c +++ b/modules/access/v4l2/demux.c @@ -73,6 +73,8 @@ static int InitVideo (demux_t *, int fd, uint32_t caps); int DemuxOpen( vlc_object_t *obj ) { demux_t *demux = (demux_t *)obj; + if (demux->out == NULL) + return VLC_EGENERIC; demux_sys_t *sys = malloc (sizeof (*sys)); if (unlikely(sys == NULL)) diff --git a/modules/access/v4l2/radio.c b/modules/access/v4l2/radio.c index acd1337ae5..c91ee2a512 100644 --- a/modules/access/v4l2/radio.c +++ b/modules/access/v4l2/radio.c @@ -68,6 +68,8 @@ static int RadioControl (demux_t *demux, int query, va_list args) int RadioOpen (vlc_object_t *obj) { demux_t *demux = (demux_t *)obj; + if (demux->out == NULL) + return VLC_EGENERIC; /* Parse MRL */ size_t pathlen = strcspn (demux->psz_location, ":;"); diff --git a/modules/access/vnc.c b/modules/access/vnc.c index 97ae4a3d12..10c4c444df 100644 --- a/modules/access/vnc.c +++ b/modules/access/vnc.c @@ -386,6 +386,9 @@ static int Open( vlc_object_t *p_this ) demux_t *p_demux = (demux_t*)p_this; demux_sys_t *p_sys; + if (p_demux->out == NULL) + return VLC_EGENERIC; + p_sys = vlc_obj_calloc( p_this, 1, sizeof(demux_sys_t) ); if( !p_sys ) return VLC_ENOMEM; diff --git a/modules/access/wasapi.c b/modules/access/wasapi.c index bc320d9943..9ecd4ccde0 100644 --- a/modules/access/wasapi.c +++ b/modules/access/wasapi.c @@ -384,6 +384,9 @@ static int Open(vlc_object_t *obj) demux_t *demux = (demux_t *)obj; HRESULT hr; + if (demux->out == NULL) + return VLC_EGENERIC; + if (demux->psz_location != NULL && *demux->psz_location != '\0') return VLC_EGENERIC; /* TODO non-default device */ _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits