@@ -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
@@ -43,8 +44,11 @@ class WindowsManifestMerger::WindowsManifestMergerImpl {
4344 void operator ()(xmlChar *Ptr) { xmlFree (Ptr); }
4445 void operator ()(xmlDoc *Ptr) { xmlFreeDoc (Ptr); }
4546 };
47+
48+
49+
4650 xmlDocPtr CombinedDoc = nullptr ;
47- std::vector<std::unique_ptr<xmlDoc, XmlDeleter> > MergedDocs;
51+ std::vector<xmlDocPtr > MergedDocs;
4852 bool Merged = false ;
4953 int BufferSize = 0 ;
5054 std::unique_ptr<xmlChar, XmlDeleter> Buffer;
@@ -610,6 +614,11 @@ static void checkAndStripPrefixes(xmlNodePtr Node,
610614 }
611615}
612616
617+ WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl () {
618+ for (auto &Doc : MergedDocs)
619+ xmlFreeDoc (Doc);
620+ }
621+
613622Error WindowsManifestMerger::WindowsManifestMergerImpl::merge (
614623 MemoryBufferRef Manifest) {
615624 if (Merged)
@@ -620,17 +629,17 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
620629 " attempted to merge empty manifest" );
621630 xmlSetGenericErrorFunc ((void *)this ,
622631 WindowsManifestMergerImpl::errorCallback);
623- std::unique_ptr<xmlDoc, XmlDeleter> ManifestXML ( xmlReadMemory (
632+ xmlDocPtr ManifestXML = xmlReadMemory (
624633 Manifest.getBufferStart (), Manifest.getBufferSize (), " manifest.xml" ,
625- nullptr , XML_PARSE_NOBLANKS | XML_PARSE_NODICT)) ;
634+ nullptr , XML_PARSE_NOBLANKS | XML_PARSE_NODICT);
626635 xmlSetGenericErrorFunc (nullptr , nullptr );
627636 if (auto E = getParseError ())
628637 return E;
629- xmlNodePtr AdditionalRoot = xmlDocGetRootElement (ManifestXML. get () );
638+ xmlNodePtr AdditionalRoot = xmlDocGetRootElement (ManifestXML);
630639 stripComments (AdditionalRoot);
631640 setAttributeNamespaces (AdditionalRoot);
632641 if (CombinedDoc == nullptr ) {
633- CombinedDoc = ManifestXML. get () ;
642+ CombinedDoc = ManifestXML;
634643 } else {
635644 xmlNodePtr CombinedRoot = xmlDocGetRootElement (CombinedDoc);
636645 if (!xmlStringsEqual (CombinedRoot->name , AdditionalRoot->name ) ||
@@ -642,7 +651,7 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
642651 return E;
643652 }
644653 }
645- MergedDocs.push_back (std::move ( ManifestXML) );
654+ MergedDocs.push_back (ManifestXML);
646655 return Error::success ();
647656}
648657
0 commit comments