From 1ab07198363744eea5620d964570e674dc7eeb52 Mon Sep 17 00:00:00 2001 From: Andres Freund Date: Mon, 18 Jul 2022 10:14:43 -0700 Subject: [PATCH] Deal with paths containing \ and spaces in basebackup_to_shell tests As $gzip is embedded in postgresql.conf \ needs to be escaped, otherwise guc.c will take it as a string escape. Similarly, if "$gzip" contains spaces, the prior incantation will fail. Both of these are common on windows. Reviewed-by: Peter Eisentraut Discussion: https://postgr.es/m/ce1b6eb3-5736-6f38-9775-b7020128b8d8@enterprisedb.com Backpatch: 15-, where the test was added in 027fa0fd726 --- contrib/basebackup_to_shell/t/001_basic.pl | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/contrib/basebackup_to_shell/t/001_basic.pl b/contrib/basebackup_to_shell/t/001_basic.pl index acb66eb9a8..5eb96090a8 100644 --- a/contrib/basebackup_to_shell/t/001_basic.pl +++ b/contrib/basebackup_to_shell/t/001_basic.pl @@ -16,6 +16,9 @@ if (!defined $gzip || $gzip eq '') plan skip_all => 'gzip not available'; } +# to ensure path can be embedded in postgresql.conf +$gzip =~ s{\\}{/}g if ($PostgreSQL::Test::Utils::windows_os); + my $node = PostgreSQL::Test::Cluster->new('primary'); # Make sure pg_hba.conf is set up to allow connections from backupuser. @@ -53,8 +56,8 @@ $escaped_backup_path =~ s{\\}{\\\\}g if ($PostgreSQL::Test::Utils::windows_os); my $shell_command = $PostgreSQL::Test::Utils::windows_os - ? qq{$gzip --fast > "$escaped_backup_path\\\\%f.gz"} - : qq{$gzip --fast > "$escaped_backup_path/%f.gz"}; + ? qq{"$gzip" --fast > "$escaped_backup_path\\\\%f.gz"} + : qq{"$gzip" --fast > "$escaped_backup_path/%f.gz"}; $node->append_conf('postgresql.conf', "basebackup_to_shell.command='$shell_command'"); $node->reload(); @@ -74,8 +77,8 @@ $node->command_fails_like( # Reconfigure to restrict access and require a detail. $shell_command = $PostgreSQL::Test::Utils::windows_os - ? qq{$gzip --fast > "$escaped_backup_path\\\\%d.%f.gz"} - : qq{$gzip --fast > "$escaped_backup_path/%d.%f.gz"}; + ? qq{"$gzip" --fast > "$escaped_backup_path\\\\%d.%f.gz"} + : qq{"$gzip" --fast > "$escaped_backup_path/%d.%f.gz"}; $node->append_conf('postgresql.conf', "basebackup_to_shell.command='$shell_command'"); $node->append_conf('postgresql.conf',