Skip to content

Commit 4ba0ffa

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 e0ec1cb commit 4ba0ffa

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

@@ -1131,9 +1136,14 @@ static const char *
11311136
get_tablespace_mapping(const char *dir)
11321137
{
11331138
TablespaceListCell *cell;
1139+
char canon_dir[MAXPGPATH];
1140+
1141+
/* Canonicalize path for comparison consistency */
1142+
strlcpy(canon_dir, dir, sizeof(canon_dir));
1143+
canonicalize_path(canon_dir);
11341144

11351145
for (cell = tablespace_dirs.head; cell; cell = cell->next)
1136-
if (strcmp(dir, cell->old_dir) == 0)
1146+
if (strcmp(canon_dir, cell->old_dir) == 0)
11371147
return cell->new_dir;
11381148

11391149
return dir;

0 commit comments

Comments
 (0)