From 52c986d8765bf1247991786f62ee73fb1d053f5e Mon Sep 17 00:00:00 2001 From: Sjoerd Simons Date: Thu, 17 Aug 2006 15:51:50 +0000 Subject: [PATCH] gst/multipart/multipartdemux.c: Accept leading whitespace before the boundary Original commit message from CVS: Patch by: Sjoerd Simons * gst/multipart/multipartdemux.c: (multipart_parse_header): Accept leading whitespace before the boundary This patch makes the demuxer allow some whitespace before the actual boundary. This makes the demuxer work with the ``old'' gstreamer multipartmuxer again (which placed an extra \n before the start of the stream) Fixes #349068. --- ChangeLog | 11 +++++++++++ gst/multipart/multipartdemux.c | 20 +++++++++++++++++--- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 605b32ead1..7e024dcc28 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2006-08-17 Wim Taymans + + Patch by: Sjoerd Simons + + * gst/multipart/multipartdemux.c: (multipart_parse_header): + Accept leading whitespace before the boundary + This patch makes the demuxer allow some whitespace before the actual + boundary. This makes the demuxer work with the ``old'' gstreamer + multipartmuxer again (which placed an extra \n before the start + of the stream) Fixes #349068. + 2006-08-17 Wim Taymans * gst/rtp/gstrtph264depay.c: (gst_rtp_h264_depay_process): diff --git a/gst/multipart/multipartdemux.c b/gst/multipart/multipartdemux.c index 714d207975..c8488e0d08 100644 --- a/gst/multipart/multipartdemux.c +++ b/gst/multipart/multipartdemux.c @@ -334,13 +334,27 @@ multipart_parse_header (GstMultipartDemux * multipart) data = gst_adapter_peek (multipart->adapter, datalen); dataend = data + datalen; + /* Skip leading whitespace, pos endposition should at least leave space for + * the boundary and a \n */ + for (pos = (guint8 *) data; pos < dataend - 4 && g_ascii_isspace (*pos); + pos++); + + if (pos >= dataend - 4) { + return MULTIPART_NEED_MORE_DATA; + } + + if (G_UNLIKELY (pos[0] != '-' || pos[1] != '-')) { + GST_DEBUG_OBJECT (multipart, "No boundary available"); + goto wrong_header; + } + /* First the boundary */ - if (!get_line_end (data, dataend, &end, &next)) + if (!get_line_end (pos, dataend, &end, &next)) return MULTIPART_NEED_MORE_DATA; /* Ignore the leading -- */ - boundary_len = end - data - 2; - boundary = (gchar *) data + 2; + boundary_len = end - pos - 2; + boundary = (gchar *) pos + 2; if (boundary_len < 1) { GST_DEBUG_OBJECT (multipart, "No boundary available"); goto wrong_header;