summaryrefslogtreecommitdiff
path: root/src/demuxers
diff options
context:
space:
mode:
authorDarren Salt <linux@youmustbejoking.demon.co.uk>2009-10-10 14:50:31 +0100
committerDarren Salt <linux@youmustbejoking.demon.co.uk>2009-10-10 14:50:31 +0100
commitac4a311c81c5d01cfbc332d248907bb833ecfed3 (patch)
tree1019df995b3db215778237b5d7cc4cace176eb99 /src/demuxers
parentc579d6f6fb0fd0075faf02a80be1a24f7f75071a (diff)
parent556f8d0d0799bd05f38cfb454fdb80de85dd2f7c (diff)
downloadxine-lib-ac4a311c81c5d01cfbc332d248907bb833ecfed3.tar.gz
xine-lib-ac4a311c81c5d01cfbc332d248907bb833ecfed3.tar.bz2
Merge from 1.1.
Diffstat (limited to 'src/demuxers')
-rw-r--r--src/demuxers/demux_qt.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/demuxers/demux_qt.c b/src/demuxers/demux_qt.c
index 0f3c42276..ce4ccba7d 100644
--- a/src/demuxers/demux_qt.c
+++ b/src/demuxers/demux_qt.c
@@ -1663,6 +1663,7 @@ static qt_error parse_reference_atom (reference_t *ref,
case RDRF_ATOM: {
size_t string_size = _X_BE_32(&ref_atom[i + 12]);
size_t url_offset = 0;
+ int http = 0;
if (string_size >= current_atom_size || i + string_size >= ref_atom_size)
return QT_NOT_A_VALID_FILE;
@@ -1671,7 +1672,13 @@ static qt_error parse_reference_atom (reference_t *ref,
if ( memcmp(&ref_atom[i + 16], "http://", 7) &&
memcmp(&ref_atom[i + 16], "rtsp://", 7) &&
base_mrl )
- url_offset = strlen(base_mrl);
+ {
+ /* We need a "qt" prefix hack for Apple trailers */
+ http = !strncasecmp (base_mrl, "http://", 7);
+ url_offset = strlen(base_mrl) + 2 * http;
+ }
+ if (url_offset >= 0x80000000)
+ return QT_NOT_A_VALID_FILE;
/* otherwise, append relative URL to base MRL */
string_size += url_offset;
@@ -1679,7 +1686,7 @@ static qt_error parse_reference_atom (reference_t *ref,
ref->url = xine_xmalloc(string_size + 1);
if ( url_offset )
- strcpy(ref->url, base_mrl);
+ sprintf (ref->url, "%s%s", http ? "qt" : "", base_mrl);
memcpy(ref->url + url_offset, &ref_atom[i + 16], _X_BE_32(&ref_atom[i + 12]));