Don't expand environment variables in wxFileName::MakeRelativeTo()

This could have been unexpected even if it worked as designed and,
unlike with direct calls to Normalize(), there was no way to prevent
this from happening.

Worse, even when no expansion was done, the simple fact of calling
wxExpandEnvVars() could result in replacing "dir\$file" with "dir$file"
as the backslash is considered as an escape character by this function
and hence break the file name structure.

Closes #17977.
This commit is contained in:
Vadim Zeitlin
2019-08-22 14:28:46 +02:00
parent 8dc3c38fad
commit eff6564795

View File

@@ -1710,10 +1710,12 @@ bool wxFileName::MakeRelativeTo(const wxString& pathBase, wxPathFormat format)
// get cwd only once - small time saving // get cwd only once - small time saving
wxString cwd = wxGetCwd(); wxString cwd = wxGetCwd();
// Normalize the paths but avoid changing the case or turning a shortcut // Normalize both paths to be absolute but avoid expanding environment
// into a file that it points to. // variables in them, this could be unexpected.
const int normFlags = wxPATH_NORM_ALL & const int normFlags = wxPATH_NORM_DOTS |
~(wxPATH_NORM_CASE | wxPATH_NORM_SHORTCUT); wxPATH_NORM_TILDE |
wxPATH_NORM_ABSOLUTE |
wxPATH_NORM_LONG;
Normalize(normFlags, cwd, format); Normalize(normFlags, cwd, format);
fnBase.Normalize(normFlags, cwd, format); fnBase.Normalize(normFlags, cwd, format);