mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 04:01:08 +00:00
gst/asfdemux/: Error out when the stream is encrypted (rather than feeding garbage to the decoders). Fixes #349025.
Original commit message from CVS: * gst/asfdemux/Makefile.am: * gst/asfdemux/asfheaders.c: * gst/asfdemux/asfheaders.h: * gst/asfdemux/gstasf.c: (plugin_init): * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_object): Error out when the stream is encrypted (rather than feeding garbage to the decoders). Fixes #349025.
This commit is contained in:
parent
287c94dcb0
commit
7a4e25d6e2
6 changed files with 50 additions and 5 deletions
10
ChangeLog
10
ChangeLog
|
@ -1,3 +1,13 @@
|
||||||
|
2006-07-28 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
|
* gst/asfdemux/Makefile.am:
|
||||||
|
* gst/asfdemux/asfheaders.c:
|
||||||
|
* gst/asfdemux/asfheaders.h:
|
||||||
|
* gst/asfdemux/gstasf.c: (plugin_init):
|
||||||
|
* gst/asfdemux/gstasfdemux.c: (gst_asf_demux_process_object):
|
||||||
|
Error out when the stream is encrypted (rather than feeding
|
||||||
|
garbage to the decoders). Fixes #349025.
|
||||||
|
|
||||||
2006-07-28 Tim-Philipp Müller <tim at centricular dot net>
|
2006-07-28 Tim-Philipp Müller <tim at centricular dot net>
|
||||||
|
|
||||||
* Makefile.am:
|
* Makefile.am:
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
plugin_LTLIBRARIES = libgstasf.la
|
plugin_LTLIBRARIES = libgstasf.la
|
||||||
|
|
||||||
libgstasf_la_SOURCES = gstasfdemux.c gstasf.c asfheaders.c
|
libgstasf_la_SOURCES = gstasfdemux.c gstasf.c asfheaders.c
|
||||||
libgstasf_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS)
|
libgstasf_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
|
||||||
libgstasf_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS)\
|
libgstasf_la_LIBADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS)\
|
||||||
-lgstriff-@GST_MAJORMINOR@
|
-lgstriff-@GST_MAJORMINOR@
|
||||||
libgstasf_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
libgstasf_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)
|
||||||
|
|
|
@ -119,6 +119,18 @@ const ASFGuidHash asf_object_guids[] = {
|
||||||
{ASF_OBJ_STREAM_PRIORITIZATION, "ASF_OBJ_STREAM_PRIORITIZATION",
|
{ASF_OBJ_STREAM_PRIORITIZATION, "ASF_OBJ_STREAM_PRIORITIZATION",
|
||||||
{0xd4fed15b, 0x454f88d3, 0x5cedf081, 0x249e9945}
|
{0xd4fed15b, 0x454f88d3, 0x5cedf081, 0x249e9945}
|
||||||
},
|
},
|
||||||
|
{ASF_OBJ_CONTENT_ENCRYPTION, "ASF_OBJ_CONTENT_ENCRYPTION",
|
||||||
|
{0x2211b3fb, 0x11d2bd23, 0xa000b7b4, 0x6efc55c9}
|
||||||
|
},
|
||||||
|
{ASF_OBJ_EXT_CONTENT_ENCRYPTION, "ASF_OBJ_EXT_CONTENT_ENCRYPTION",
|
||||||
|
{0x298ae614, 0x4c172622, 0xe0da35b9, 0x9c28e97e}
|
||||||
|
},
|
||||||
|
{ASF_OBJ_DIGITAL_SIGNATURE_OBJECT, "ASF_OBJ_DIGITAL_SIGNATURE_OBJECT",
|
||||||
|
{0x2211b3fc, 0x11d2bd23, 0xa000b7b4, 0x6efc55c9}
|
||||||
|
},
|
||||||
|
{ASF_OBJ_SCRIPT_COMMAND, "ASF_OBJ_SCRIPT_COMMAND",
|
||||||
|
{0x1efb1a30, 0x11d00b62, 0xa0009ba3, 0xf64803c9}
|
||||||
|
},
|
||||||
{ASF_OBJ_UNDEFINED, "ASF_OBJ_UNDEFINED",
|
{ASF_OBJ_UNDEFINED, "ASF_OBJ_UNDEFINED",
|
||||||
{0, 0, 0, 0}
|
{0, 0, 0, 0}
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,11 @@ enum {
|
||||||
ASF_OBJ_INDEX_PLACEHOLDER,
|
ASF_OBJ_INDEX_PLACEHOLDER,
|
||||||
ASF_OBJ_INDEX_PARAMETERS,
|
ASF_OBJ_INDEX_PARAMETERS,
|
||||||
ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION,
|
ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION,
|
||||||
ASF_OBJ_STREAM_PRIORITIZATION
|
ASF_OBJ_STREAM_PRIORITIZATION,
|
||||||
|
ASF_OBJ_CONTENT_ENCRYPTION,
|
||||||
|
ASF_OBJ_EXT_CONTENT_ENCRYPTION,
|
||||||
|
ASF_OBJ_DIGITAL_SIGNATURE_OBJECT,
|
||||||
|
ASF_OBJ_SCRIPT_COMMAND
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
|
|
@ -22,7 +22,8 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <gst/gst.h>
|
#include <gst/gst.h>
|
||||||
#include <gst/riff/riff-media.h>
|
#include <gst/riff/riff-read.h>
|
||||||
|
#include "gst/gst-i18n-plugin.h"
|
||||||
|
|
||||||
#include "gstasfdemux.h"
|
#include "gstasfdemux.h"
|
||||||
/* #include "gstasfmux.h" */
|
/* #include "gstasfmux.h" */
|
||||||
|
@ -30,6 +31,11 @@
|
||||||
static gboolean
|
static gboolean
|
||||||
plugin_init (GstPlugin * plugin)
|
plugin_init (GstPlugin * plugin)
|
||||||
{
|
{
|
||||||
|
#ifdef ENABLE_NLS
|
||||||
|
setlocale (LC_ALL, "");
|
||||||
|
bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR);
|
||||||
|
#endif /* ENABLE_NLS */
|
||||||
|
|
||||||
gst_riff_init ();
|
gst_riff_init ();
|
||||||
|
|
||||||
if (!gst_element_register (plugin, "asfdemux", GST_RANK_SECONDARY,
|
if (!gst_element_register (plugin, "asfdemux", GST_RANK_SECONDARY,
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
|
|
||||||
#include <gst/gstutils.h>
|
#include <gst/gstutils.h>
|
||||||
#include <gst/riff/riff-media.h>
|
#include <gst/riff/riff-media.h>
|
||||||
|
#include "gst/gst-i18n-plugin.h"
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "gstasfdemux.h"
|
#include "gstasfdemux.h"
|
||||||
|
@ -935,7 +936,7 @@ gst_asf_demux_add_audio_stream (GstASFDemux * demux,
|
||||||
gst_asf_demux_setup_pad (demux, src_pad, caps, id, FALSE, tags);
|
gst_asf_demux_setup_pad (demux, src_pad, caps, id, FALSE, tags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static void
|
||||||
gst_asf_demux_add_video_stream (GstASFDemux * demux,
|
gst_asf_demux_add_video_stream (GstASFDemux * demux,
|
||||||
asf_stream_video_format * video, guint16 id,
|
asf_stream_video_format * video, guint16 id,
|
||||||
guint8 ** p_data, guint64 * p_size)
|
guint8 ** p_data, guint64 * p_size)
|
||||||
|
@ -1832,7 +1833,6 @@ gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data,
|
||||||
GstFlowReturn ret;
|
GstFlowReturn ret;
|
||||||
guint32 obj_id;
|
guint32 obj_id;
|
||||||
guint64 obj_size, obj_data_size;
|
guint64 obj_size, obj_data_size;
|
||||||
gint64 processed;
|
|
||||||
|
|
||||||
if (!gst_asf_demux_get_object_header (demux, &obj_id, &obj_size, p_data,
|
if (!gst_asf_demux_get_object_header (demux, &obj_id, &obj_size, p_data,
|
||||||
p_size)) {
|
p_size)) {
|
||||||
|
@ -1887,6 +1887,10 @@ gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data,
|
||||||
case ASF_OBJ_LANGUAGE_LIST:
|
case ASF_OBJ_LANGUAGE_LIST:
|
||||||
ret = gst_asf_demux_process_language_list (demux, p_data, p_size);
|
ret = gst_asf_demux_process_language_list (demux, p_data, p_size);
|
||||||
break;
|
break;
|
||||||
|
case ASF_OBJ_CONTENT_ENCRYPTION:
|
||||||
|
case ASF_OBJ_EXT_CONTENT_ENCRYPTION:
|
||||||
|
case ASF_OBJ_DIGITAL_SIGNATURE_OBJECT:
|
||||||
|
goto error_encrypted;
|
||||||
case ASF_OBJ_CONCEAL_NONE:
|
case ASF_OBJ_CONCEAL_NONE:
|
||||||
case ASF_OBJ_HEAD2:
|
case ASF_OBJ_HEAD2:
|
||||||
case ASF_OBJ_UNDEFINED:
|
case ASF_OBJ_UNDEFINED:
|
||||||
|
@ -1900,6 +1904,7 @@ gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data,
|
||||||
case ASF_OBJ_INDEX_PARAMETERS:
|
case ASF_OBJ_INDEX_PARAMETERS:
|
||||||
case ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION:
|
case ASF_OBJ_ADVANCED_MUTUAL_EXCLUSION:
|
||||||
case ASF_OBJ_STREAM_PRIORITIZATION:
|
case ASF_OBJ_STREAM_PRIORITIZATION:
|
||||||
|
case ASF_OBJ_SCRIPT_COMMAND:
|
||||||
default:
|
default:
|
||||||
/* Unknown/unhandled object read. Just ignore
|
/* Unknown/unhandled object read. Just ignore
|
||||||
* it, people don't like fatal errors much */
|
* it, people don't like fatal errors much */
|
||||||
|
@ -1918,6 +1923,14 @@ gst_asf_demux_process_object (GstASFDemux * demux, guint8 ** p_data,
|
||||||
gst_asf_demux_pop_obj (demux);
|
gst_asf_demux_pop_obj (demux);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
/* ERRORS */
|
||||||
|
error_encrypted:
|
||||||
|
{
|
||||||
|
GST_ELEMENT_ERROR (demux, STREAM, DECODE,
|
||||||
|
(_("This file is encrypted and cannot be played.")), (NULL));
|
||||||
|
return GST_FLOW_ERROR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in a new issue