summaryrefslogtreecommitdiffstats
path: root/Source/cmFileCommand.cxx
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2019-05-21 13:20:01 (GMT)
committerBrad King <brad.king@kitware.com>2019-05-21 13:25:32 (GMT)
commita1eb03569d0e82fb6eaf9a11da1960cfa456f5ef (patch)
tree25283c5ad6e24dcbdf80eb8bad912ca6892f21f9 /Source/cmFileCommand.cxx
parent1db0edb2a65b272a7c91e719e818da2e2ce49fb5 (diff)
downloadCMake-a1eb03569d0e82fb6eaf9a11da1960cfa456f5ef.zip
CMake-a1eb03569d0e82fb6eaf9a11da1960cfa456f5ef.tar.gz
CMake-a1eb03569d0e82fb6eaf9a11da1960cfa456f5ef.tar.bz2
file: Change REMOVE to ignore empty names
Previously code like file(REMOVE_RECURSE "${accidentally_missing_variable}") treated the empty string as a relative path with respect to the current directory and removed its contents. Change this behavior to ignore the empty string with a warning instead. Normally such behavior changes are done with a policy, but in this case such code is likely a real bug in project code that can delete data. Fixes: #19274
Diffstat (limited to 'Source/cmFileCommand.cxx')
-rw-r--r--Source/cmFileCommand.cxx6
1 files changed, 6 insertions, 0 deletions
diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx
index f5ec9fe..1349910 100644
--- a/Source/cmFileCommand.cxx
+++ b/Source/cmFileCommand.cxx
@@ -1405,6 +1405,12 @@ bool cmFileCommand::HandleRemove(std::vector<std::string> const& args,
cmMakeRange(args).advance(1)) // Get rid of subcommand
{
std::string fileName = arg;
+ if (fileName.empty()) {
+ std::string const r = recurse ? "REMOVE_RECURSE" : "REMOVE";
+ this->Makefile->IssueMessage(MessageType::AUTHOR_WARNING,
+ "Ignoring empty file name in " + r + ".");
+ continue;
+ }
if (!cmsys::SystemTools::FileIsFullPath(fileName)) {
fileName = this->Makefile->GetCurrentSourceDirectory();
fileName += "/" + arg;