Trailing '/' in paths causes lstat to dereference symlinks to directories which
causes it to break even though the symlink is a valid target.

Signed-off-by: Andrew Gregory <[email protected]>
---
 src/pacman/query.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/pacman/query.c b/src/pacman/query.c
index 176f91c..d145707 100644
--- a/src/pacman/query.c
+++ b/src/pacman/query.c
@@ -137,6 +137,12 @@ static int query_fileowner(alpm_list_t *targets)
 
                filename = strdup(t->data);
 
+               /* trailing '/' causes lstat to dereference directory symlinks 
*/
+               size_t len = strlen(filename) - 1;
+               while(len > 0 && filename[len] == '/'){
+                       filename[len--] = '\0';
+               }
+
                if(lstat(filename, &buf) == -1) {
                        /*  if it is not a path but a program name, then check 
in PATH */
                        if(strchr(filename, '/') == NULL) {
-- 
1.7.11.3


Reply via email to