Fix TAP tests and MSVC scripts for pathnames with spaces.
authorTom Lane
Sat, 9 Jul 2016 20:47:38 +0000 (16:47 -0400)
committerTom Lane
Sat, 9 Jul 2016 20:47:38 +0000 (16:47 -0400)
Change assorted places in our Perl code that did things like
system("prog $path/file");
to do it more like
system('prog', "$path/file");
which is safe against spaces and other special characters in the path
variable.  The latter was already the prevailing style, but a few bits
of code hadn't gotten this memo.  Back-patch to 9.4 as relevant.

Michael Paquier, Kyotaro Horiguchi

Discussion: <20160704.160213.111134711[email protected]>

src/test/perl/PostgresNode.pm
src/tools/msvc/Install.pm
src/tools/msvc/vcregress.pl

index 636dfec5c06cedb4b4e014ad8cb2cb5cf644c07d..57679195b424c2a4a3055530d4848b212c698d2d 100644 (file)
@@ -475,7 +475,8 @@ sub backup
    my $name        = $self->name;
 
    print "# Taking pg_basebackup $backup_name from node \"$name\"\n";
-   TestLib::system_or_bail("pg_basebackup -D $backup_path -p $port -x");
+   TestLib::system_or_bail('pg_basebackup', '-D', $backup_path,
+                           '-p', $port, '-x');
    print "# Backup finished\n";
 }
 
@@ -763,7 +764,7 @@ sub enable_restoring
    my $copy_command =
      $TestLib::windows_os
      ? qq{copy "$path\\\\%f" "%p"}
-     : qq{cp $path/%f %p};
+     : qq{cp "$path/%f" "%p"};
 
    $self->append_conf(
        'recovery.conf', qq(
@@ -791,7 +792,7 @@ sub enable_archiving
    my $copy_command =
      $TestLib::windows_os
      ? qq{copy "%p" "$path\\\\%f"}
-     : qq{cp %p $path/%f};
+     : qq{cp "%p" "$path/%f"};
 
    # Enable archive_mode and archive_command on node
    $self->append_conf(
index 031719d5d8eb7a86830edd133c8889818cc0d0a9..e27e3f6476482e7a1d6fc6ba620349b21036dfe3 100644 (file)
@@ -381,12 +381,21 @@ sub GenerateTimezoneFiles
    my $mf     = read_file("src/timezone/Makefile");
    $mf =~ s{\\\r?\n}{}g;
    $mf =~ /^TZDATA\s*:?=\s*(.*)$/m
-     || die "Could not find TZDATA row in timezone makefile\n";
+     || die "Could not find TZDATA line in timezone makefile\n";
    my @tzfiles = split /\s+/, $1;
-   unshift @tzfiles, '';
+
    print "Generating timezone files...";
-   system("$conf\\zic\\zic -d \"$target/share/timezone\" "
-         . join(" src/timezone/data/", @tzfiles));
+
+   my @args = ("$conf/zic/zic",
+               '-d',
+               "$target/share/timezone");
+   foreach (@tzfiles)
+   {
+       my $tzfile = $_;
+       push(@args, "src/timezone/data/$tzfile")
+   }
+
+   system(@args);
    print "\n";
 }
 
@@ -634,9 +643,10 @@ sub CopyIncludeFiles
        next unless (-d "src/include/$d");
 
        EnsureDirectories("$target/include/server/$d");
-       system(
-qq{xcopy /s /i /q /r /y src\\include\\$d\\*.h "$ctarget\\include\\server\\$d\\"}
-       ) && croak("Failed to copy include directory $d\n");
+       my @args = ('xcopy', '/s', '/i', '/q', '/r', '/y',
+                "src\\include\\$d\\*.h",
+                "$ctarget\\include\\server\\$d\\");
+       system(@args) && croak("Failed to copy include directory $d\n");
    }
    closedir($D);
 
@@ -689,9 +699,11 @@ sub GenerateNLSFiles
 
            EnsureDirectories($target, "share/locale/$lang",
                "share/locale/$lang/LC_MESSAGES");
-           system(
-"\"$nlspath\\bin\\msgfmt\" -o \"$target\\share\\locale\\$lang\\LC_MESSAGES\\$prgm-$majorver.mo\" $_"
-           ) && croak("Could not run msgfmt on $dir\\$_");
+           my @args = ("$nlspath\\bin\\msgfmt",
+              '-o',
+              "$target\\share\\locale\\$lang\\LC_MESSAGES\\$prgm-$majorver.mo",
+              $_);
+           system(@args) && croak("Could not run msgfmt on $dir\\$_");
            print ".";
        }
    }
index 075279a00e71dc82121d58cca47c06fdb05dd0d7..cfe18836b2e433ee996f71459b8aedeaafc81d29 100644 (file)
@@ -412,35 +412,41 @@ sub upgradecheck
    print "\nRunning initdb on old cluster\n\n";
    standard_initdb() or exit 1;
    print "\nStarting old cluster\n\n";
-   system("pg_ctl start -l $logdir/postmaster1.log -w") == 0 or exit 1;
+   my @args = ('pg_ctl', 'start', '-l', "$logdir/postmaster1.log", '-w');
+   system(@args) == 0 or exit 1;
    print "\nSetting up data for upgrading\n\n";
    installcheck();
 
    # now we can chdir into the source dir
    chdir "$topdir/src/bin/pg_upgrade";
    print "\nDumping old cluster\n\n";
-   system("pg_dumpall -f $tmp_root/dump1.sql") == 0 or exit 1;
+   @args = ('pg_dumpall', '-f', "$tmp_root/dump1.sql");
+   system(@args) == 0 or exit 1;
    print "\nStopping old cluster\n\n";
    system("pg_ctl -m fast stop") == 0 or exit 1;
    $ENV{PGDATA} = "$data";
    print "\nSetting up new cluster\n\n";
    standard_initdb() or exit 1;
    print "\nRunning pg_upgrade\n\n";
-   system("pg_upgrade -d $data.old -D $data -b $bindir -B $bindir") == 0
-     or exit 1;
+   @args = ('pg_upgrade', '-d', "$data.old", '-D', $data, '-b', $bindir,
+            '-B', $bindir);
+   system(@args) == 0 or exit 1;
    print "\nStarting new cluster\n\n";
-   system("pg_ctl -l $logdir/postmaster2.log -w start") == 0 or exit 1;
+   @args = ('pg_ctl', '-l', "$logdir/postmaster2.log", '-w', 'start');
+   system(@args) == 0 or exit 1;
    print "\nSetting up stats on new cluster\n\n";
    system(".\\analyze_new_cluster.bat") == 0 or exit 1;
    print "\nDumping new cluster\n\n";
-   system("pg_dumpall -f $tmp_root/dump2.sql") == 0 or exit 1;
+   @args = ('pg_dumpall', '-f', "$tmp_root/dump2.sql");
+   system(@args) == 0 or exit 1;
    print "\nStopping new cluster\n\n";
    system("pg_ctl -m fast stop") == 0 or exit 1;
    print "\nDeleting old cluster\n\n";
    system(".\\delete_old_cluster.bat") == 0 or exit 1;
    print "\nComparing old and new cluster dumps\n\n";
 
-   system("diff -q $tmp_root/dump1.sql $tmp_root/dump2.sql");
+   @args = ('diff', '-q', "$tmp_root/dump1.sql", "$tmp_root/dump2.sql");
+   system(@args);
    $status = $?;
    if (!$status)
    {