From d5208fb179a431047213918d628e490344899d97 Mon Sep 17 00:00:00 2001 From: Gilbok Lee Date: Wed, 12 Dec 2018 14:40:16 +0900 Subject: [PATCH] asfdemux: Disable WMV video format Change-Id: Ibb08490b7875af70a90a0d9b8239a8e845a7e2cf --- gst/asfdemux/gstasfdemux.c | 27 ++++++++++++++++++++++++++- gst/asfdemux/gstasfdemux.h | 9 ++++++--- packaging/gst-plugins-ugly.spec | 3 +-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/gst/asfdemux/gstasfdemux.c b/gst/asfdemux/gstasfdemux.c index bd820fa6..3de53c23 100644 --- a/gst/asfdemux/gstasfdemux.c +++ b/gst/asfdemux/gstasfdemux.c @@ -319,6 +319,10 @@ gst_asf_demux_init (GstASFDemux * demux) GST_DEBUG_FUNCPTR (gst_asf_demux_activate_mode)); gst_element_add_pad (GST_ELEMENT (demux), demux->sinkpad); +#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT + demux->is_supported_format = TRUE; +#endif + /* set initial state */ gst_asf_demux_reset (demux, FALSE); } @@ -3134,7 +3138,15 @@ gst_asf_demux_parse_stream_object (GstASFDemux * demux, guint8 * data, &data, &size)) { goto not_enough_data; } - +#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT + /* Compare video format WMV*, WVC* */ + if (((video_format_object.tag & 0x00ffffff) == (guint32)(('W')|('M')<<8|('V')<<16)) + || ((video_format_object.tag & 0x00ffffff) == (guint32)(('W')|('V')<<8|('C')<<16))) { + GST_ERROR_OBJECT (demux, "WMV file format is not supported."); + demux->is_supported_format = FALSE; + return NULL; + } +#endif stream = gst_asf_demux_add_video_stream (demux, &video_format_object, stream_id, &data, &size); @@ -4220,6 +4232,13 @@ gst_asf_demux_process_ext_stream_props (GstASFDemux * demux, guint8 * data, stream = gst_asf_demux_parse_stream_object (demux, stream_obj_data, len); g_free (stream_obj_data); +#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT + if ((stream == NULL) && (demux->is_supported_format == FALSE)) { + g_free (esp.payload_extensions); + return GST_FLOW_NOT_SUPPORTED; + } +#endif + done: if (stream) { @@ -4440,6 +4459,12 @@ gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data, switch (obj.id) { case ASF_OBJ_STREAM: gst_asf_demux_parse_stream_object (demux, *p_data, obj_data_size); +#ifdef TIZEN_FEATURE_ASFDEMUX_MODIFICATION + if (demux->is_supported_format == FALSE) { + ret = GST_FLOW_NOT_SUPPORTED; + break; + } +#endif ret = GST_FLOW_OK; break; case ASF_OBJ_FILE: diff --git a/gst/asfdemux/gstasfdemux.h b/gst/asfdemux/gstasfdemux.h index 953b4963..e33b8855 100644 --- a/gst/asfdemux/gstasfdemux.h +++ b/gst/asfdemux/gstasfdemux.h @@ -28,7 +28,7 @@ #include "asfheaders.h" G_BEGIN_DECLS - + #define GST_TYPE_ASF_DEMUX \ (gst_asf_demux_get_type()) #define GST_ASF_DEMUX(obj) \ @@ -140,7 +140,7 @@ typedef struct /* extended stream properties (optional) */ AsfStreamExtProps ext_props; - + gboolean inspect_payload; } AsfStream; @@ -231,7 +231,7 @@ struct _GstASFDemux { GstClockTime sidx_interval; /* interval between entries in ns */ guint sidx_num_entries; /* number of index entries */ AsfSimpleIndexEntry *sidx_entries; /* packet number for each entry */ - + GSList *other_streams; /* remember streams that are in header but have unknown type */ /* For reverse playback */ @@ -242,6 +242,9 @@ struct _GstASFDemux { GstASF3DMode asf_3D_mode; gboolean saw_file_header; +#ifdef TIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT + gboolean is_supported_format; +#endif }; struct _GstASFDemuxClass { diff --git a/packaging/gst-plugins-ugly.spec b/packaging/gst-plugins-ugly.spec index ae572368..0447124d 100644 --- a/packaging/gst-plugins-ugly.spec +++ b/packaging/gst-plugins-ugly.spec @@ -41,6 +41,7 @@ export CFLAGS="\ -DTIZEN_FEATURE_TRUSTZONE\ %endif -DTIZEN_FEATURE_ASFDEMUX_CHECK_DATA_SIZE\ + -DTIZEN_FEATURE_ASFDEMUX_DISABLE_UNSUPPORTED_FORMAT\ -fstack-protector-strong\ -Wl,-z,relro\ -D_FORTIFY_SOURCE=2" @@ -88,5 +89,3 @@ make %{?jobs:-j%jobs} %exclude %{_datadir}/gstreamer-1.0/presets/GstAmrnbEnc.prs %endif %{_libdir}/gstreamer-1.0/libgstamrwbdec.so - - -- 2.34.1