The branch master has been updated
       via  7afef721ff93018a66f8e2e6b9e1ce3d48321bdf (commit)
      from  ef0449135c4e4e7f04bbeafbd76ce7b5c0518088 (commit)


- Log -----------------------------------------------------------------
commit 7afef721ff93018a66f8e2e6b9e1ce3d48321bdf
Author: Richard Levitte <levi...@openssl.org>
Date:   Thu Jun 10 16:43:27 2021 +0200

    OpenSSL::Test: If __cwd() is to create the directory, do it early
    
    This is to ensure that abs_path() has an existing directory to look at.
    
    Reviewed-by: Tomas Mraz <to...@openssl.org>
    (Merged from https://github.com/openssl/openssl/pull/15701)

-----------------------------------------------------------------------

Summary of changes:
 util/perl/OpenSSL/Test.pm | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/util/perl/OpenSSL/Test.pm b/util/perl/OpenSSL/Test.pm
index 00db3d41c8..00aa4d841e 100644
--- a/util/perl/OpenSSL/Test.pm
+++ b/util/perl/OpenSSL/Test.pm
@@ -1124,6 +1124,14 @@ sub __data_dir {
 sub __cwd {
     my $dir = catdir(shift);
     my %opts = @_;
+
+    # If the directory is to be created, we must do that before using
+    # abs_path().
+    $dir = canonpath($dir);
+    if ($opts{create}) {
+       mkpath($dir);
+    }
+
     my $abscurdir = abs_path(curdir());
     my $absdir = abs_path($dir);
     my $reverse = abs2rel($abscurdir, $absdir);
@@ -1143,11 +1151,6 @@ sub __cwd {
     # In this case, we won't even clean it out, for safety's sake.
     return "." if $reverse eq "";
 
-    $dir = canonpath($dir);
-    if ($opts{create}) {
-       mkpath($dir);
-    }
-
     # We are recalculating the directories we keep track of, but need to save
     # away the result for after having moved into the new directory.
     my %tmp_directories = ();
@@ -1160,11 +1163,10 @@ sub __cwd {
     foreach (@dirtags) {
        if (!file_name_is_absolute($directories{$_})) {
            my $oldpath = abs_path($directories{$_});
-           my $newbase = abs_path($dir);
-           my $newpath = abs2rel($oldpath, $newbase);
+           my $newpath = abs2rel($oldpath, $absdir);
            if ($debug) {
                print STDERR "DEBUG: [dir $_] old path: $oldpath\n";
-               print STDERR "DEBUG: [dir $_] new base: $newbase\n";
+               print STDERR "DEBUG: [dir $_] new base: $absdir\n";
                print STDERR "DEBUG: [dir $_] resulting new path: $newpath\n";
            }
            $tmp_directories{$_} = $newpath;
@@ -1177,11 +1179,10 @@ sub __cwd {
     foreach (@direnv) {
        if (!file_name_is_absolute($ENV{$_})) {
            my $oldpath = abs_path($ENV{$_});
-           my $newbase = abs_path($dir);
-           my $newpath = abs2rel($oldpath, $newbase);
+           my $newpath = abs2rel($oldpath, $absdir);
            if ($debug) {
                print STDERR "DEBUG: [env $_] old path: $oldpath\n";
-               print STDERR "DEBUG: [env $_] new base: $newbase\n";
+               print STDERR "DEBUG: [env $_] new base: $absdir\n";
                print STDERR "DEBUG: [env $_] resulting new path: $newpath\n";
            }
            $tmp_ENV{$_} = $newpath;

Reply via email to