@@ -32,6 +32,7 @@ void WindowsManifestError::log(raw_ostream &OS) const { OS << Msg; }
32
32
33
33
class WindowsManifestMerger ::WindowsManifestMergerImpl {
34
34
public:
35
+ ~WindowsManifestMergerImpl ();
35
36
Error merge (MemoryBufferRef Manifest);
36
37
std::unique_ptr<MemoryBuffer> getMergedManifest ();
37
38
@@ -44,7 +45,7 @@ class WindowsManifestMerger::WindowsManifestMergerImpl {
44
45
void operator ()(xmlDoc *Ptr) { xmlFreeDoc (Ptr); }
45
46
};
46
47
xmlDocPtr CombinedDoc = nullptr ;
47
- std::vector<std::unique_ptr<xmlDoc, XmlDeleter> > MergedDocs;
48
+ std::vector<xmlDocPtr > MergedDocs;
48
49
bool Merged = false ;
49
50
int BufferSize = 0 ;
50
51
std::unique_ptr<xmlChar, XmlDeleter> Buffer;
@@ -610,6 +611,11 @@ static void checkAndStripPrefixes(xmlNodePtr Node,
610
611
}
611
612
}
612
613
614
+ WindowsManifestMerger::WindowsManifestMergerImpl::~WindowsManifestMergerImpl () {
615
+ for (auto &Doc : MergedDocs)
616
+ xmlFreeDoc (Doc);
617
+ }
618
+
613
619
Error WindowsManifestMerger::WindowsManifestMergerImpl::merge (
614
620
MemoryBufferRef Manifest) {
615
621
if (Merged)
@@ -620,17 +626,17 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
620
626
" attempted to merge empty manifest" );
621
627
xmlSetGenericErrorFunc ((void *)this ,
622
628
WindowsManifestMergerImpl::errorCallback);
623
- std::unique_ptr<xmlDoc, XmlDeleter> ManifestXML ( xmlReadMemory (
629
+ xmlDocPtr ManifestXML = xmlReadMemory (
624
630
Manifest.getBufferStart (), Manifest.getBufferSize (), " manifest.xml" ,
625
- nullptr , XML_PARSE_NOBLANKS | XML_PARSE_NODICT)) ;
631
+ nullptr , XML_PARSE_NOBLANKS | XML_PARSE_NODICT);
626
632
xmlSetGenericErrorFunc (nullptr , nullptr );
627
633
if (auto E = getParseError ())
628
634
return E;
629
- xmlNodePtr AdditionalRoot = xmlDocGetRootElement (ManifestXML. get () );
635
+ xmlNodePtr AdditionalRoot = xmlDocGetRootElement (ManifestXML);
630
636
stripComments (AdditionalRoot);
631
637
setAttributeNamespaces (AdditionalRoot);
632
638
if (CombinedDoc == nullptr ) {
633
- CombinedDoc = ManifestXML. get () ;
639
+ CombinedDoc = ManifestXML;
634
640
} else {
635
641
xmlNodePtr CombinedRoot = xmlDocGetRootElement (CombinedDoc);
636
642
if (!xmlStringsEqual (CombinedRoot->name , AdditionalRoot->name ) ||
@@ -642,7 +648,7 @@ Error WindowsManifestMerger::WindowsManifestMergerImpl::merge(
642
648
return E;
643
649
}
644
650
}
645
- MergedDocs.push_back (std::move ( ManifestXML) );
651
+ MergedDocs.push_back (ManifestXML);
646
652
return Error::success ();
647
653
}
648
654
0 commit comments