aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-09-12 10:26:52 +0200
committerMax Kellermann <max@duempel.org>2013-09-12 10:54:45 +0200
commit69a5df2f98672b79fe28ba46db5338f132a6555b (patch)
treeccc4385ad22314ba7a1a074e33e2cf6af9f51cc1
parent1c65908cdb1559d7dc7ebbf93d2e1eb9b94197e0 (diff)
downloadmpd-69a5df2f98672b79fe28ba46db5338f132a6555b.tar.gz
mpd-69a5df2f98672b79fe28ba46db5338f132a6555b.tar.xz
mpd-69a5df2f98672b79fe28ba46db5338f132a6555b.zip
ConfigPath: remove the "~/" from the constructed path
This was building broken paths like "/home/foo/~/bar". Bug found by Maarten de Vries.
-rw-r--r--src/ConfigPath.cxx15
1 files changed, 9 insertions, 6 deletions
diff --git a/src/ConfigPath.cxx b/src/ConfigPath.cxx
index 6bc56b897..85739761c 100644
--- a/src/ConfigPath.cxx
+++ b/src/ConfigPath.cxx
@@ -82,10 +82,6 @@ ParsePath(const char *path, Error &error)
{
assert(path != nullptr);
- Path path2 = Path::FromUTF8(path, error);
- if (path2.IsNull())
- return Path::Null();
-
#ifndef WIN32
if (path[0] == '~') {
Path home = Path::Null();
@@ -105,12 +101,19 @@ ParsePath(const char *path, Error &error)
home = GetHome(user, error);
g_free(user);
- path = slash;
+ if (slash == nullptr)
+ return home;
+
+ path = slash + 1;
}
if (home.IsNull())
return Path::Null();
+ Path path2 = Path::FromUTF8(path, error);
+ if (path2.IsNull())
+ return Path::Null();
+
return Path::Build(home, path2);
} else if (!g_path_is_absolute(path)) {
error.Format(path_domain,
@@ -118,7 +121,7 @@ ParsePath(const char *path, Error &error)
return Path::Null();
} else {
#endif
- return path2;
+ return Path::FromUTF8(path, error);
#ifndef WIN32
}
#endif