[vlc-devel] [PATCH] sftp: check symbolic links when readdir

Zhao Zhili quinkblack at foxmail.com
Sun Feb 11 05:05:08 CET 2018


---
 modules/access/sftp.c | 31 ++++++++++++++++++++++++++++++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/modules/access/sftp.c b/modules/access/sftp.c
index 1219f573a1..cd5182e319 100644
--- a/modules/access/sftp.c
+++ b/modules/access/sftp.c
@@ -649,7 +649,36 @@ static int DirRead (stream_t *p_access, input_item_node_t *p_current_node)
         }
         free( psz_uri );
 
-        int i_type = LIBSSH2_SFTP_S_ISDIR( attrs.permissions ) ? ITEM_TYPE_DIRECTORY : ITEM_TYPE_FILE;
+        int i_type;
+        if( LIBSSH2_SFTP_S_ISDIR( attrs.permissions ) )
+        {
+            i_type = ITEM_TYPE_DIRECTORY;
+        }
+        else if( LIBSSH2_SFTP_S_ISLNK( attrs.permissions ) )
+        {
+            vlc_url_t url;
+
+            if( vlc_UrlParseFixup( &url, psz_full_uri ) != 0 )
+            {
+                vlc_UrlClean( &url );
+                free(psz_full_uri);
+                break;
+            }
+            if( libssh2_sftp_stat( p_sys->sftp_session, url.psz_path, &attrs ) )
+            {
+                msg_Warn( p_access, "Impossible to get information about symbolic link %s", url.psz_path );
+                vlc_UrlClean( &url );
+                free( psz_full_uri );
+                continue;
+            }
+            vlc_UrlClean( &url );
+            i_type = LIBSSH2_SFTP_S_ISDIR( attrs.permissions ) ? ITEM_TYPE_DIRECTORY : ITEM_TYPE_FILE;
+        }
+        else
+        {
+            i_type = ITEM_TYPE_FILE;
+        }
+
         i_ret = vlc_readdir_helper_additem( &rdh, psz_full_uri, NULL, psz_file,
                                             i_type, ITEM_NET );
         free( psz_full_uri );
-- 
2.14.1






More information about the vlc-devel mailing list