@@ -32,6 +32,7 @@ void WindowsManifestError::log(raw_ostream &OS) const { OS << Msg; }
3232
3333class WindowsManifestMerger ::WindowsManifestMergerImpl {
3434public:
35+ ~WindowsManifestMergerImpl ();
3536 Error merge (MemoryBufferRef Manifest);
3637 std::unique_ptr<MemoryBuffer> getMergedManifest ();
3738
@@ -44,7 +45,7 @@ class WindowsManifestMerger::WindowsManifestMergerImpl {
4445 void operator ()(xmlDoc *Ptr) { xmlFreeDoc (Ptr); }
4546 };
4647 xmlDocPtr CombinedDoc = nullptr ;
47- std::vector<std::unique_ptr<xmlDoc, XmlDeleter> > MergedDocs;
48+ std::vector<xmlDocPtr > MergedDocs;
4849 bool Merged = false ;
4950 int BufferSize = 0 ;
5051 std::unique_ptr<xmlChar, XmlDeleter> Buffer;
@@ -610,6 +611,11 @@ static void checkAndStripPrefixes(xmlNodePtr Node,
610611 }
611612}
612613
614+ WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl () {
615+ for (auto &Doc : MergedDocs)
616+ xmlFreeDoc (Doc);
617+ }
618+
613619Error WindowsManifestMerger::WindowsManifestMergerImpl::merge (
614620 MemoryBufferRef Manifest) {
615621 if (Merged)
@@ -620,17 +626,17 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
620626 " attempted to merge empty manifest" );
621627 xmlSetGenericErrorFunc ((void *)this ,
622628 WindowsManifestMergerImpl::errorCallback);
623- std::unique_ptr<xmlDoc, XmlDeleter> ManifestXML ( xmlReadMemory (
629+ xmlDocPtr ManifestXML = xmlReadMemory (
624630 Manifest.getBufferStart (), Manifest.getBufferSize (), " manifest.xml" ,
625- nullptr , XML_PARSE_NOBLANKS | XML_PARSE_NODICT)) ;
631+ nullptr , XML_PARSE_NOBLANKS | XML_PARSE_NODICT);
626632 xmlSetGenericErrorFunc (nullptr , nullptr );
627633 if (auto E = getParseError ())
628634 return E;
629- xmlNodePtr AdditionalRoot = xmlDocGetRootElement (ManifestXML. get () );
635+ xmlNodePtr AdditionalRoot = xmlDocGetRootElement (ManifestXML);
630636 stripComments (AdditionalRoot);
631637 setAttributeNamespaces (AdditionalRoot);
632638 if (CombinedDoc == nullptr ) {
633- CombinedDoc = ManifestXML. get () ;
639+ CombinedDoc = ManifestXML;
634640 } else {
635641 xmlNodePtr CombinedRoot = xmlDocGetRootElement (CombinedDoc);
636642 if (!xmlStringsEqual (CombinedRoot->name , AdditionalRoot->name ) ||
@@ -642,7 +648,7 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
642648 return E;
643649 }
644650 }
645- MergedDocs.push_back (std::move ( ManifestXML) );
651+ MergedDocs.push_back (ManifestXML);
646652 return Error::success ();
647653}
648654
0 commit comments