Resolve '..' in library paths.
authorMikko Värri <vmj@linuxbox.fi>
Sat, 8 Oct 2011 11:12:31 +0000 (14:12 +0300)
committerMikko Värri <vmj@linuxbox.fi>
Sat, 8 Oct 2011 11:12:31 +0000 (14:12 +0300)
lib/Slackware/File.pm

index 2052d55..8345b18 100644 (file)
@@ -20,6 +20,7 @@
 package Slackware::File;
 
 use strict;
+use Cwd qw( realpath );
 
 sub new {
     my $class = shift;
@@ -173,6 +174,11 @@ sub required_shared_libraries {
             my $dest = Slackware::Cache::readlink($line);
             chomp($dest);
             $line = $dest;
+        } else {
+            # Resolve ".." and "." segments in the path (as seen in e.g. jre).
+            # This is in else clause because realpath resolves symlinks, too,
+            # but would bypass our cache.
+            $line = realpath($line);
         }
         $line =~ s[^/][];
         push @{ $self->{required_shared_libs} }, Slackware::Cache::get_file("/", $line);