From 72fdd708cf27cd535e5af06ff20b47c519e3b8f4 Mon Sep 17 00:00:00 2001 From: Thiago Santos Date: Fri, 7 May 2010 10:59:22 -0300 Subject: [PATCH] jifmux: Be safe and check bytewriter returns Check GstByteWriter returns to know when recombining the image failed and log a warning. --- gst/jpegformat/gstjifmux.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/gst/jpegformat/gstjifmux.c b/gst/jpegformat/gstjifmux.c index 8b8c7f0f6a..64f774a018 100644 --- a/gst/jpegformat/gstjifmux.c +++ b/gst/jpegformat/gstjifmux.c @@ -513,6 +513,7 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf, GstJifMuxMarker *m; GList *node; guint size = self->priv->scan_size; + gboolean writer_status = TRUE; /* iterate list and collect size */ for (node = self->priv->markers; node; node = g_list_next (node)) { @@ -541,27 +542,34 @@ gst_jif_mux_recombine_image (GstJifMux * self, GstBuffer ** new_buf, /* memcopy markers */ writer = gst_byte_writer_new_with_buffer (buf, TRUE); - for (node = self->priv->markers; node; node = g_list_next (node)) { + for (node = self->priv->markers; node && writer_status; + node = g_list_next (node)) { m = (GstJifMuxMarker *) node->data; - gst_byte_writer_put_uint8 (writer, 0xff); - gst_byte_writer_put_uint8 (writer, m->marker); + writer_status &= gst_byte_writer_put_uint8 (writer, 0xff); + writer_status &= gst_byte_writer_put_uint8 (writer, m->marker); GST_DEBUG_OBJECT (self, "marker = %2x, size = %u", m->marker, m->size + 2); if (m->size) { - gst_byte_writer_put_uint16_be (writer, m->size + 2); - gst_byte_writer_put_data (writer, m->data, m->size); + writer_status &= gst_byte_writer_put_uint16_be (writer, m->size + 2); + writer_status &= gst_byte_writer_put_data (writer, m->data, m->size); } if (m->marker == SOS) { GST_DEBUG_OBJECT (self, "scan data, size = %u", self->priv->scan_size); - gst_byte_writer_put_data (writer, self->priv->scan_data, + writer_status &= gst_byte_writer_put_data (writer, self->priv->scan_data, self->priv->scan_size); } } gst_byte_writer_free (writer); + if (!writer_status) { + GST_WARNING_OBJECT (self, "Failed to write to buffer, calculated size " + "was probably too short"); + g_assert_not_reached (); + } + *new_buf = buf; return GST_FLOW_OK;