perl-XML-LibXML/XML-LibXML-2.0129-CVE-2017-10672.patch
2017-07-17 13:23:33 +02:00

78 lines
3.2 KiB
Diff

diff -urN XML-LibXML-2.0129.orig/LibXML.xs XML-LibXML-2.0129/LibXML.xs
--- XML-LibXML-2.0129.orig/LibXML.xs 2016-06-24 18:01:53.000000000 +0200
+++ XML-LibXML-2.0129/LibXML.xs 2017-07-13 12:41:48.000000000 +0200
@@ -4829,38 +4829,42 @@
PREINIT:
xmlNodePtr ret = NULL;
CODE:
- if ( self->type == XML_DOCUMENT_NODE ) {
- switch ( nNode->type ) {
- case XML_ELEMENT_NODE:
- warn("replaceChild with an element on a document node not supported yet!");
- XSRETURN_UNDEF;
- break;
- case XML_DOCUMENT_FRAG_NODE:
- warn("replaceChild with a document fragment node on a document node not supported yet!");
- XSRETURN_UNDEF;
- break;
- case XML_TEXT_NODE:
- case XML_CDATA_SECTION_NODE:
- warn("replaceChild with a text node not supported on a document node!");
- XSRETURN_UNDEF;
- break;
- default:
- break;
- }
- }
- ret = domReplaceChild( self, nNode, oNode );
- if (ret == NULL) {
- XSRETURN_UNDEF;
- }
- else {
- LibXML_reparent_removed_node(ret);
- RETVAL = PmmNodeToSv(ret, PmmOWNERPO(PmmPROXYNODE(ret)));
- if (nNode->type == XML_DTD_NODE) {
- LibXML_set_int_subset(nNode->doc, nNode);
+ if( nNode == oNode ) {
+ RETVAL = nNode;
+ }else{
+ if ( self->type == XML_DOCUMENT_NODE ) {
+ switch ( nNode->type ) {
+ case XML_ELEMENT_NODE:
+ warn("replaceChild with an element on a document node not supported yet!");
+ XSRETURN_UNDEF;
+ break;
+ case XML_DOCUMENT_FRAG_NODE:
+ warn("replaceChild with a document fragment node on a document node not supported yet!");
+ XSRETURN_UNDEF;
+ break;
+ case XML_TEXT_NODE:
+ case XML_CDATA_SECTION_NODE:
+ warn("replaceChild with a text node not supported on a document node!");
+ XSRETURN_UNDEF;
+ break;
+ default:
+ break;
+ }
}
- if ( nNode->_private != NULL ) {
- PmmFixOwner( PmmPROXYNODE(nNode),
- PmmOWNERPO(PmmPROXYNODE(self)) );
+ ret = domReplaceChild( self, nNode, oNode );
+ if (ret == NULL) {
+ XSRETURN_UNDEF;
+ }
+ else {
+ LibXML_reparent_removed_node(ret);
+ RETVAL = PmmNodeToSv(ret, PmmOWNERPO(PmmPROXYNODE(ret)));
+ if (nNode->type == XML_DTD_NODE) {
+ LibXML_set_int_subset(nNode->doc, nNode);
+ }
+ if ( nNode->_private != NULL ) {
+ PmmFixOwner( PmmPROXYNODE(nNode),
+ PmmOWNERPO(PmmPROXYNODE(self)) );
+ }
}
}
OUTPUT: