gst/mpegtsparse/mpegtspacketizer.c: Ensure that the plugin does not crash when the property pat-info is queried befor...

Original commit message from CVS:
Patch by: Wai-Ming Ho <webregbox at yahoo dot co dot uk>
* gst/mpegtsparse/mpegtspacketizer.c: (foreach_stream_clear),
(remove_all), (mpegts_packetizer_clear):
Ensure that the plugin does not crash when the property pat-info is
queried before a PAT is available. It also ensures that the PAT info is
cleared when the changing from PLAYING to READY.
Fixes #487892.
This commit is contained in:
Wai-Ming Ho 2007-11-15 19:03:33 +00:00 committed by Wim Taymans
parent 0830d14b27
commit 5d794c0007
2 changed files with 23 additions and 3 deletions

View File

@ -1,3 +1,14 @@
2007-11-15 Wim Taymans <wim.taymans@gmail.com>
Patch by: Wai-Ming Ho <webregbox at yahoo dot co dot uk>
* gst/mpegtsparse/mpegtspacketizer.c: (foreach_stream_clear),
(remove_all), (mpegts_packetizer_clear):
Ensure that the plugin does not crash when the property pat-info is
queried before a PAT is available. It also ensures that the PAT info is
cleared when the changing from PLAYING to READY.
Fixes #487892.
2007-11-15 Wim Taymans <wim.taymans@gmail.com> 2007-11-15 Wim Taymans <wim.taymans@gmail.com>
Patch by: Wouter Paesen <wouter at blue-gate dot be> Patch by: Wouter Paesen <wouter at blue-gate dot be>

View File

@ -428,20 +428,29 @@ error:
static void static void
foreach_stream_clear (gpointer key, gpointer value, gpointer data) foreach_stream_clear (gpointer key, gpointer value, gpointer data)
{ {
MpegTSPacketizer *packetizer = (MpegTSPacketizer *) data;
MpegTSPacketizerStream *stream = (MpegTSPacketizerStream *) value; MpegTSPacketizerStream *stream = (MpegTSPacketizerStream *) value;
mpegts_packetizer_clear_section (packetizer, stream); /* remove the stream */
g_object_unref (stream->section_adapter);
g_free (stream);
}
static gboolean
remove_all (gpointer key, gpointer value, gpointer user_data)
{
return TRUE;
} }
void void
mpegts_packetizer_clear (MpegTSPacketizer * packetizer) mpegts_packetizer_clear (MpegTSPacketizer * packetizer)
{ {
g_hash_table_foreach (packetizer->streams, foreach_stream_clear, packetizer); g_hash_table_foreach (packetizer->streams, foreach_stream_clear, packetizer);
/* FIXME can't use remove_all because we don't depend on 2.12 yet */
g_hash_table_foreach_remove (packetizer->streams, remove_all, NULL);
gst_adapter_clear (packetizer->adapter); gst_adapter_clear (packetizer->adapter);
} }
MpegTSPacketizer * MpegTSPacketizer *
mpegts_packetizer_new () mpegts_packetizer_new ()
{ {