From 3824f32bdd51b03ae1cd9d3f33e6b218c6e5cb44 Mon Sep 17 00:00:00 2001 From: "sangwan.kwon" Date: Tue, 13 Dec 2016 14:26:58 +0900 Subject: Fix memory leak on upstream code * The result of xmlGetProp() should be free. * See, http://xmlsoft.org/library.html Change-Id: I42570b24df40606dd0603a7ef4f0a2994089d9f6 Signed-off-by: sangwan.kwon (cherry picked from commit 569d8600374c6e0b686443467a148987265668f7) --- src/relationship.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/relationship.c b/src/relationship.c index f301ed7b..e510d4b6 100644 --- a/src/relationship.c +++ b/src/relationship.c @@ -232,6 +232,7 @@ xmlSecRelationshipReadNode(xmlSecTransformPtr transform, xmlNodePtr node, xmlSec "xmlStrdup", XMLSEC_ERRORS_R_STRDUP_FAILED, "len=%d", xmlStrlen(sourceId)); + xmlFree(sourceId); return(-1); } @@ -242,9 +243,12 @@ xmlSecRelationshipReadNode(xmlSecTransformPtr transform, xmlNodePtr node, xmlSec "xmlSecPtrListAdd", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); + xmlFree(sourceId); xmlFree(tmp); return(-1); } + xmlFree(sourceId); + xmlFree(tmp); } cur = cur->next; @@ -258,6 +262,7 @@ static int xmlSecTransformRelationshipCompare(xmlNodePtr node1, xmlNodePtr node2) { xmlChar* id1; xmlChar* id2; + int ret; if(node1 == node2) { return(0); @@ -275,10 +280,15 @@ xmlSecTransformRelationshipCompare(xmlNodePtr node1, xmlNodePtr node2) { return(-1); } if(id2 == NULL) { + xmlFree(id1); return(1); } - return(xmlStrcmp(id1, id2)); + ret = xmlStrcmp(id1, id2); + xmlFree(id1); + xmlFree(id2); + + return(ret); } /** @@ -316,8 +326,10 @@ xmlSecTransformRelationshipProcessNode(xmlSecTransformPtr transform, xmlOutputBu } if(found < 0) { + xmlFree(id); return(0); } + xmlFree(id); } ret = xmlSecTransformRelationshipProcessElementNode(transform, buf, cur); @@ -523,7 +535,7 @@ xmlSecTransformRelationshipProcessElementNode(xmlSecTransformPtr transform, xmlO * This is step 3, point 6: add default value of TargetMode if there is no such attribute. */ for(attr = cur->properties; attr != NULL; attr = attr->next) { - xmlChar * value = xmlGetProp(cur, attr->name); + xmlChar* value = xmlGetProp(cur, attr->name); if(xmlStrcmp(attr->name, xmlSecRelationshipAttrTargetMode) == 0) { foundTargetMode = 1; @@ -536,8 +548,10 @@ xmlSecTransformRelationshipProcessElementNode(xmlSecTransformPtr transform, xmlO "xmlSecTransformRelationshipWriteProp", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); + xmlFree(value); return(-1); } + xmlFree(value); } /* write TargetMode */ -- cgit v1.2.3