vlc | branch: master | Filip Roséen <[email protected]> | Thu Oct 13 22:43:13 2016 
+0200| [36bee7702fe9f12b44f8228332813b05fdd125a4] | committer: Thomas Guillem

demux/playlist/xspf: fix input-item uri creation

The previous implementation inaccurately treated "p_sys->psz_base" as
if it was referring to whatever directory (uri-wise) that contains the
playlist we are currently processing.

Given that this is not the case, it would not handle relative paths
correctly.

These changes make sure that we use ProcessMRL to properly handle the
paths found within the playlist (the function handles both absolute
and relative ones).

fixes #17506

Signed-off-by: Thomas Guillem <[email protected]>

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=36bee7702fe9f12b44f8228332813b05fdd125a4
---

 modules/demux/playlist/xspf.c | 21 ++++++++-------------
 1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/modules/demux/playlist/xspf.c b/modules/demux/playlist/xspf.c
index 5dfbfe4..16ee1b3 100644
--- a/modules/demux/playlist/xspf.c
+++ b/modules/demux/playlist/xspf.c
@@ -484,24 +484,19 @@ static bool parse_track_node COMPLEX_INTERFACE
             if (psz_value == NULL)
                 input_item_SetURI(p_new_input, "vlc://nop");
             else
-            /* FIXME (#4005): This is broken. Scheme-relative (//...) locations
-             * and anchors (#...) are not resolved correctly. Also,
-             * host-relative (/...) and directory-relative locations
-             * ("relative path" in vernacular) should be resolved.
-             * -- Courmisch */
-            if (p_sys->psz_base && !strstr(psz_value, "://"))
             {
-                char* psz_tmp;
-                if (asprintf(&psz_tmp, "%s%s", p_sys->psz_base, psz_value)
-                    == -1)
+                char* psz_uri = ProcessMRL( psz_value, p_sys->psz_base );
+
+                if( !psz_uri )
                 {
+                    msg_Warn( p_demux, "unable to process MRL: %s", psz_value 
);
                     goto end;
                 }
-                input_item_SetURI(p_new_input, psz_tmp);
-                free(psz_tmp);
+
+                input_item_SetURI(p_new_input, psz_uri);
+                free(psz_uri);
             }
-            else
-                input_item_SetURI(p_new_input, psz_value);
+
             input_item_CopyOptions(p_new_input, p_input_item);
         }
         else

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to