Skip to content

Commit 3064f0e

Browse files
committed
pg_basebackup: Fix comparison handling of tablespace mappings on Windows
A candidate path needs to be canonicalized before being checked against the mappings, because the mappings are also canonicalized. This is especially relevant on Windows Reported-by: nb <nbedxp@gmail.com> Author: Michael Paquier <michael.paquier@gmail.com> Reviewed-by: Ashutosh Sharma <ashu.coek88@gmail.com>
1 parent d2e6bd1 commit 3064f0e

File tree

1 file changed

+11
-1
lines changed

1 file changed

+11
-1
lines changed

src/bin/pg_basebackup/pg_basebackup.c

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,11 @@ tablespace_list_append(const char *arg)
201201
exit(1);
202202
}
203203

204+
/*
205+
* Comparisons done with these values should involve similarly
206+
* canonicalized path values. This is particularly sensitive on Windows
207+
* where path values may not necessarily use Unix slashes.
208+
*/
204209
canonicalize_path(cell->old_dir);
205210
canonicalize_path(cell->new_dir);
206211

@@ -1120,9 +1125,14 @@ static const char *
11201125
get_tablespace_mapping(const char *dir)
11211126
{
11221127
TablespaceListCell *cell;
1128+
char canon_dir[MAXPGPATH];
1129+
1130+
/* Canonicalize path for comparison consistency */
1131+
strlcpy(canon_dir, dir, sizeof(canon_dir));
1132+
canonicalize_path(canon_dir);
11231133

11241134
for (cell = tablespace_dirs.head; cell; cell = cell->next)
1125-
if (strcmp(dir, cell->old_dir) == 0)
1135+
if (strcmp(canon_dir, cell->old_dir) == 0)
11261136
return cell->new_dir;
11271137

11281138
return dir;

0 commit comments

Comments
 (0)