summaryrefslogtreecommitdiffstats
path: root/gst/multipart
diff options
context:
space:
mode:
authorSjoerd Simons <sjoerd@luon.net>2006-08-17 15:51:50 +0000
committerWim Taymans <wim.taymans@gmail.com>2006-08-17 15:51:50 +0000
commit52c986d8765bf1247991786f62ee73fb1d053f5e (patch)
tree62db8cb0815a3967774d52815975a67a0560c800 /gst/multipart
parent5880332110c815df3aba007783383cf3ecf35ca3 (diff)
gst/multipart/multipartdemux.c: Accept leading whitespace before the boundary
Original commit message from CVS: Patch by: Sjoerd Simons <sjoerd at luon dot net> * 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.
Diffstat (limited to 'gst/multipart')
-rw-r--r--gst/multipart/multipartdemux.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/gst/multipart/multipartdemux.c b/gst/multipart/multipartdemux.c
index 714d2079..c8488e0d 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;