summaryrefslogtreecommitdiffstats
path: root/Source/CPack/WiX/cmWIXSourceWriter.cxx
diff options
context:
space:
mode:
authorNils Gladitz <nilsgladitz@gmail.com>2013-10-23 10:14:39 (GMT)
committerBrad King <brad.king@kitware.com>2013-10-26 14:15:19 (GMT)
commitfe7f8c99a459f93df594a8e5c5f49389d71ae128 (patch)
tree193c19944985976c6ddbe7343cc33879286fecb0 /Source/CPack/WiX/cmWIXSourceWriter.cxx
parent20c0a6a0add0380290adab4989425d0b26e38d24 (diff)
downloadCMake-fe7f8c99a459f93df594a8e5c5f49389d71ae128.zip
CMake-fe7f8c99a459f93df594a8e5c5f49389d71ae128.tar.gz
CMake-fe7f8c99a459f93df594a8e5c5f49389d71ae128.tar.bz2
CPackWiX: use safe IDs for generated start menu shortcuts
Diffstat (limited to 'Source/CPack/WiX/cmWIXSourceWriter.cxx')
-rw-r--r--Source/CPack/WiX/cmWIXSourceWriter.cxx29
1 files changed, 24 insertions, 5 deletions
diff --git a/Source/CPack/WiX/cmWIXSourceWriter.cxx b/Source/CPack/WiX/cmWIXSourceWriter.cxx
index af7ba80..214b8ac 100644
--- a/Source/CPack/WiX/cmWIXSourceWriter.cxx
+++ b/Source/CPack/WiX/cmWIXSourceWriter.cxx
@@ -21,7 +21,8 @@ cmWIXSourceWriter::cmWIXSourceWriter(cmCPackLog* logger,
bool isIncludeFile):
Logger(logger),
file(filename.c_str()),
- state(DEFAULT)
+ state(DEFAULT),
+ sourceFilename(filename)
{
WriteXMLDeclaration();
@@ -39,10 +40,15 @@ cmWIXSourceWriter::cmWIXSourceWriter(cmCPackLog* logger,
cmWIXSourceWriter::~cmWIXSourceWriter()
{
- while(elements.size())
+ if(elements.size() > 1)
{
- EndElement();
+ cmCPackLogger(cmCPackLog::LOG_ERROR,
+ elements.size() - 1 << " WiX elements were still open when closing '" <<
+ sourceFilename << "'" << std::endl);
+ return;
}
+
+ EndElement(elements.back());
}
void cmWIXSourceWriter::BeginElement(const std::string& name)
@@ -60,12 +66,22 @@ void cmWIXSourceWriter::BeginElement(const std::string& name)
state = BEGIN;
}
-void cmWIXSourceWriter::EndElement()
+void cmWIXSourceWriter::EndElement(std::string const& name)
{
if(elements.empty())
{
cmCPackLogger(cmCPackLog::LOG_ERROR,
- "can not end WiX element with no open elements" << std::endl);
+ "can not end WiX element with no open elements in '" <<
+ sourceFilename << "'" << std::endl);
+ return;
+ }
+
+ if(elements.back() != name)
+ {
+ cmCPackLogger(cmCPackLog::LOG_ERROR,
+ "WiX element <" << elements.back() <<
+ "> can not be closed by </" << name << "> in '" <<
+ sourceFilename << "'" << std::endl);
return;
}
@@ -173,6 +189,9 @@ std::string cmWIXSourceWriter::EscapeAttributeValue(
case '<':
result += "&lt;";
break;
+ case '>':
+ result += "&gt;";
+ break;
case '&':
result +="&amp;";
break;