From 04754176a680e6e11ba2b4ce5910381add062d3e Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 28 Apr 2006 14:48:11 +0000 Subject: [PATCH] gst-libs/gst/audio/gstringbuffer.c: Check arguments passed to public functions instead of crashing. Original commit message from CVS: * gst-libs/gst/audio/gstringbuffer.c: (gst_ring_buffer_set_callback), (gst_ring_buffer_acquire), (gst_ring_buffer_release), (gst_ring_buffer_is_acquired), (gst_ring_buffer_set_flushing), (gst_ring_buffer_start), (gst_ring_buffer_pause), (gst_ring_buffer_stop), (gst_ring_buffer_delay), (gst_ring_buffer_samples_done), (gst_ring_buffer_set_sample), (gst_ring_buffer_clear_all), (gst_ring_buffer_commit), (gst_ring_buffer_read), (gst_ring_buffer_prepare_read), (gst_ring_buffer_advance), (gst_ring_buffer_clear), (gst_ring_buffer_may_start): Check arguments passed to public functions instead of crashing. --- ChangeLog | 15 +++++++++++++ gst-libs/gst/audio/gstringbuffer.c | 36 +++++++++++++++++------------- 2 files changed, 35 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 85e50b668f..69a0bfccdf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2006-04-28 Wim Taymans + + * gst-libs/gst/audio/gstringbuffer.c: + (gst_ring_buffer_set_callback), (gst_ring_buffer_acquire), + (gst_ring_buffer_release), (gst_ring_buffer_is_acquired), + (gst_ring_buffer_set_flushing), (gst_ring_buffer_start), + (gst_ring_buffer_pause), (gst_ring_buffer_stop), + (gst_ring_buffer_delay), (gst_ring_buffer_samples_done), + (gst_ring_buffer_set_sample), (gst_ring_buffer_clear_all), + (gst_ring_buffer_commit), (gst_ring_buffer_read), + (gst_ring_buffer_prepare_read), (gst_ring_buffer_advance), + (gst_ring_buffer_clear), (gst_ring_buffer_may_start): + Check arguments passed to public functions instead of + crashing. + 2006-04-28 Wim Taymans * gst-libs/gst/audio/gstbaseaudiosrc.c: (gst_base_audio_src_init), diff --git a/gst-libs/gst/audio/gstringbuffer.c b/gst-libs/gst/audio/gstringbuffer.c index 34067e1c19..14f7c09719 100644 --- a/gst-libs/gst/audio/gstringbuffer.c +++ b/gst-libs/gst/audio/gstringbuffer.c @@ -374,7 +374,7 @@ void gst_ring_buffer_set_callback (GstRingBuffer * buf, GstRingBufferCallback cb, gpointer user_data) { - g_return_if_fail (buf != NULL); + g_return_if_fail (GST_IS_RING_BUFFER (buf)); GST_OBJECT_LOCK (buf); buf->callback = cb; @@ -557,7 +557,7 @@ gst_ring_buffer_acquire (GstRingBuffer * buf, GstRingBufferSpec * spec) gint i, j; gint segsize, bps; - g_return_val_if_fail (buf != NULL, FALSE); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE); GST_DEBUG_OBJECT (buf, "acquiring device"); @@ -644,7 +644,7 @@ gst_ring_buffer_release (GstRingBuffer * buf) gboolean res = FALSE; GstRingBufferClass *rclass; - g_return_val_if_fail (buf != NULL, FALSE); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE); GST_DEBUG_OBJECT (buf, "releasing device"); @@ -709,7 +709,7 @@ gst_ring_buffer_is_acquired (GstRingBuffer * buf) { gboolean res; - g_return_val_if_fail (buf != NULL, FALSE); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE); GST_OBJECT_LOCK (buf); res = buf->acquired; @@ -729,6 +729,8 @@ gst_ring_buffer_is_acquired (GstRingBuffer * buf) void gst_ring_buffer_set_flushing (GstRingBuffer * buf, gboolean flushing) { + g_return_if_fail (GST_IS_RING_BUFFER (buf)); + GST_OBJECT_LOCK (buf); buf->abidata.ABI.flushing = flushing; @@ -756,7 +758,7 @@ gst_ring_buffer_start (GstRingBuffer * buf) GstRingBufferClass *rclass; gboolean resume = FALSE; - g_return_val_if_fail (buf != NULL, FALSE); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE); GST_DEBUG_OBJECT (buf, "starting ringbuffer"); @@ -865,7 +867,7 @@ gst_ring_buffer_pause (GstRingBuffer * buf) { gboolean res = FALSE; - g_return_val_if_fail (buf != NULL, FALSE); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE); GST_OBJECT_LOCK (buf); if (G_UNLIKELY (buf->abidata.ABI.flushing)) @@ -899,7 +901,7 @@ gst_ring_buffer_stop (GstRingBuffer * buf) gboolean res = FALSE; GstRingBufferClass *rclass; - g_return_val_if_fail (buf != NULL, FALSE); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE); GST_DEBUG_OBJECT (buf, "stopping"); @@ -955,7 +957,7 @@ gst_ring_buffer_delay (GstRingBuffer * buf) GstRingBufferClass *rclass; guint res; - g_return_val_if_fail (buf != NULL, 0); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), 0); res = 0; @@ -989,7 +991,7 @@ gst_ring_buffer_samples_done (GstRingBuffer * buf) guint64 raw, samples; guint delay; - g_return_val_if_fail (buf != NULL, 0); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), 0); /* get the amount of segments we processed */ segdone = g_atomic_int_get (&buf->segdone); @@ -1025,7 +1027,7 @@ gst_ring_buffer_samples_done (GstRingBuffer * buf) void gst_ring_buffer_set_sample (GstRingBuffer * buf, guint64 sample) { - g_return_if_fail (buf != NULL); + g_return_if_fail (GST_IS_RING_BUFFER (buf)); if (sample == -1) sample = 0; @@ -1057,7 +1059,7 @@ gst_ring_buffer_clear_all (GstRingBuffer * buf) { gint i; - g_return_if_fail (buf != NULL); + g_return_if_fail (GST_IS_RING_BUFFER (buf)); /* not fatal, we just are not negotiated yet */ if (G_UNLIKELY (buf->spec.segtotal <= 0)) @@ -1159,7 +1161,7 @@ gst_ring_buffer_commit (GstRingBuffer * buf, guint64 sample, guchar * data, guint8 *dest; guint to_write; - g_return_val_if_fail (buf != NULL, -1); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), -1); g_return_val_if_fail (buf->data != NULL, -1); g_return_val_if_fail (data != NULL, -1); @@ -1265,7 +1267,7 @@ gst_ring_buffer_read (GstRingBuffer * buf, guint64 sample, guchar * data, gint segsize, segtotal, bps, sps; guint8 *dest; - g_return_val_if_fail (buf != NULL, -1); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), -1); g_return_val_if_fail (buf->data != NULL, -1); g_return_val_if_fail (data != NULL, -1); @@ -1370,7 +1372,7 @@ gst_ring_buffer_prepare_read (GstRingBuffer * buf, gint * segment, guint8 *data; gint segdone; - g_return_val_if_fail (buf != NULL, FALSE); + g_return_val_if_fail (GST_IS_RING_BUFFER (buf), FALSE); /* buffer must be started */ if (g_atomic_int_get (&buf->state) != GST_RING_BUFFER_STATE_STARTED) @@ -1414,7 +1416,7 @@ gst_ring_buffer_prepare_read (GstRingBuffer * buf, gint * segment, void gst_ring_buffer_advance (GstRingBuffer * buf, guint advance) { - g_return_if_fail (buf != NULL); + g_return_if_fail (GST_IS_RING_BUFFER (buf)); /* update counter */ g_atomic_int_add (&buf->segdone, advance); @@ -1445,7 +1447,7 @@ gst_ring_buffer_clear (GstRingBuffer * buf, gint segment) { guint8 *data; - g_return_if_fail (buf != NULL); + g_return_if_fail (GST_IS_RING_BUFFER (buf)); /* no data means it's already cleared */ if (G_UNLIKELY (buf->data == NULL)) @@ -1480,6 +1482,8 @@ gst_ring_buffer_clear (GstRingBuffer * buf, gint segment) void gst_ring_buffer_may_start (GstRingBuffer * buf, gboolean allowed) { + g_return_if_fail (GST_IS_RING_BUFFER (buf)); + GST_LOG_OBJECT (buf, "may start: %d", allowed); gst_atomic_int_set (&buf->abidata.ABI.may_start, allowed); }