diff --git a/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp b/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp index a85dcd2ae2859..cdd63686d4711 100644 --- a/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp +++ b/llvm/lib/WindowsManifest/WindowsManifestMerger.cpp @@ -32,7 +32,6 @@ void WindowsManifestError::log(raw_ostream &OS) const { OS << Msg; } class WindowsManifestMerger::WindowsManifestMergerImpl { public: - ~WindowsManifestMergerImpl(); Error merge(MemoryBufferRef Manifest); std::unique_ptr getMergedManifest(); @@ -45,7 +44,7 @@ class WindowsManifestMerger::WindowsManifestMergerImpl { void operator()(xmlDoc *Ptr) { xmlFreeDoc(Ptr); } }; xmlDocPtr CombinedDoc = nullptr; - std::vector MergedDocs; + std::vector> MergedDocs; bool Merged = false; int BufferSize = 0; std::unique_ptr Buffer; @@ -611,11 +610,6 @@ static void checkAndStripPrefixes(xmlNodePtr Node, } } -WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl() { - for (auto &Doc : MergedDocs) - xmlFreeDoc(Doc); -} - Error WindowsManifestMerger::WindowsManifestMergerImpl::merge( MemoryBufferRef Manifest) { if (Merged) @@ -626,17 +620,17 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge( "attempted to merge empty manifest"); xmlSetGenericErrorFunc((void *)this, WindowsManifestMergerImpl::errorCallback); - xmlDocPtr ManifestXML = xmlReadMemory( + std::unique_ptr ManifestXML(xmlReadMemory( Manifest.getBufferStart(), Manifest.getBufferSize(), "manifest.xml", - nullptr, XML_PARSE_NOBLANKS | XML_PARSE_NODICT); + nullptr, XML_PARSE_NOBLANKS | XML_PARSE_NODICT)); xmlSetGenericErrorFunc(nullptr, nullptr); if (auto E = getParseError()) return E; - xmlNodePtr AdditionalRoot = xmlDocGetRootElement(ManifestXML); + xmlNodePtr AdditionalRoot = xmlDocGetRootElement(ManifestXML.get()); stripComments(AdditionalRoot); setAttributeNamespaces(AdditionalRoot); if (CombinedDoc == nullptr) { - CombinedDoc = ManifestXML; + CombinedDoc = ManifestXML.get(); } else { xmlNodePtr CombinedRoot = xmlDocGetRootElement(CombinedDoc); if (!xmlStringsEqual(CombinedRoot->name, AdditionalRoot->name) || @@ -648,7 +642,7 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge( return E; } } - MergedDocs.push_back(ManifestXML); + MergedDocs.push_back(std::move(ManifestXML)); return Error::success(); }