git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 63d6b97)
pg_basebackup: Fix comparison handling of tablespace mappings on Windows
Wed, 1 Nov 2017 14:20:05 +0000 (10:20 -0400)
Wed, 1 Nov 2017 14:20:05 +0000 (10:20 -0400)
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>

diff --git a/src/bin/pg_basebackup/pg_basebackup.c b/src/bin/pg_basebackup/pg_basebackup.c
index dac7299ff48ff01178b7a0de1d38c7ae4bfa0446..a8715d912d517889ad4e765d96b42fccf0c72cb9 100644 (file)
--- a/src/bin/pg_basebackup/pg_basebackup.c
+++ b/src/bin/pg_basebackup/pg_basebackup.c
@@ -298,6 +298,11 @@ tablespace_list_append(const char *arg)
exit(1);
}
+ /*
+ * Comparisons done with these values should involve similarly
+ * canonicalized path values. This is particularly sensitive on Windows
+ * where path values may not necessarily use Unix slashes.
+ */
canonicalize_path(cell->old_dir);
canonicalize_path(cell->new_dir);
@@ -1303,9 +1308,14 @@ static const char *
get_tablespace_mapping(const char *dir)
{
TablespaceListCell *cell;
+ char canon_dir[MAXPGPATH];
+
+ /* Canonicalize path for comparison consistency */
+ strlcpy(canon_dir, dir, sizeof(canon_dir));
+ canonicalize_path(canon_dir);
for (cell = tablespace_dirs.head; cell; cell = cell->next)
- if (strcmp(dir, cell->old_dir) == 0)
+ if (strcmp(canon_dir, cell->old_dir) == 0)
return cell->new_dir;
return dir;
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /