[patch] domxml ./. fix for some memory leaks + cleanups

From: Date: Thu, 04 Apr 2002 10:38:37 +0000
Subject: [patch] domxml ./. fix for some memory leaks + cleanups
Groups: php.dev 
Request: Send a blank email to php-dev+get-82079@lists.php.net to get a copy of this message
hi! this patch is against current cvs. it contains some trivial cleanups and fixes for several memory leaks, where memory that gets malloc()ed in libxml2 is not free()d. please apply... additionally, this patch changes get_attribute() to return FALSE instead of an empty string if the attribute does not exists. without this change, php code cannot distinguish between a missing and an empty attribute. i hope this gets applied too... regards, -lukas

Index: ext/domxml/php_domxml.c =================================================================== RCS file: /repository/php4/ext/domxml/php_domxml.c,v retrieving revision 1.132 diff -u -r1.132 php_domxml.c --- ext/domxml/php_domxml.c 27 Mar 2002 21:45:45 -0000 1.132 +++ ext/domxml/php_domxml.c 4 Apr 2002 10:28:29 -0000 @@ -744,9 +744,7 @@ { zval *wrapper; - if (! found) { *found = 0; - } if (!obj) { MAKE_STD_ZVAL(wrapper); @@ -851,9 +849,7 @@ zval *wrapper; int rsrc_type; - if (! found) { *found = 0; - } if (!obj) { MAKE_STD_ZVAL(wrapper); @@ -937,9 +933,7 @@ char *content; int rsrc_type; - if (! found) { *found = 0; - } if (!obj) { MAKE_STD_ZVAL(wrapper); @@ -976,6 +970,7 @@ if (content) { add_property_long(wrapper, "type", Z_TYPE_P(nodep)); add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1); + xmlFree(content); } break; } @@ -989,6 +984,7 @@ if (content) { add_property_long(wrapper, "type", Z_TYPE_P(nodep)); add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1); + xmlFree(content); } break; } @@ -1000,8 +996,10 @@ rsrc_type = le_domxmlpip; content = xmlNodeGetContent(nodep); add_property_stringl(wrapper, "target", (char *) nodep->name, strlen(nodep->name), 1); - if (content) + if (content) { add_property_stringl(wrapper, "data", (char *) content, strlen(content), 1); + xmlFree(content); + } break; } @@ -1024,8 +1022,10 @@ add_property_stringl(wrapper, "name", (char *) nodep->name, strlen(nodep->name), 1); if (Z_TYPE_P(obj) == XML_ENTITY_REF_NODE) { content = xmlNodeGetContent(nodep); - if (content) + if (content) { add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1); + xmlFree(content); + } } break; } @@ -1038,8 +1038,10 @@ add_property_stringl(wrapper, "name", (char *) attrp->name, strlen(attrp->name), 1); add_property_long(wrapper, "type", Z_TYPE_P(attrp)); content = xmlNodeGetContent((xmlNodePtr) attrp); - if (content) + if (content) { add_property_stringl(wrapper, "value", (char *) content, strlen(content), 1); + xmlFree(content); + } break; } @@ -1093,8 +1095,10 @@ rsrc_type = le_domxmlcdatap; content = xmlNodeGetContent(nodep); add_property_long(wrapper, "type", Z_TYPE_P(nodep)); - if (content) + if (content) { add_property_stringl(wrapper, "content", (char *) content, strlen(content), 1); + xmlFree(content); + } break; } @@ -1749,7 +1753,7 @@ } /* }}} */ -/* {{{ proto object domxml_node_prefix(void) +/* {{{ proto string domxml_node_prefix(void) Returns namespace prefix of node */ PHP_FUNCTION(domxml_node_prefix) { @@ -2103,7 +2107,8 @@ RETURN_FALSE; } - RETURN_STRING(mem,1); + RETVAL_STRING(mem,1); + xmlFree(mem); } /* }}} */ @@ -2201,9 +2206,10 @@ value = xmlGetProp(nodep, name); if (!value) { - RETURN_EMPTY_STRING(); + RETURN_FALSE; } else { - RETURN_STRING(value, 1); + RETVAL_STRING(value, 1); + xmlFree(value); } } /* }}} */ @@ -2242,8 +2248,7 @@ DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len); attrp = xmlHasProp(nodep,name); - if (attrp == NULL) - { + if (attrp == NULL) { RETURN_FALSE; } xmlUnlinkNode((xmlNodePtr)attrp); @@ -2263,8 +2268,7 @@ DOMXML_PARAM_TWO(nodep, id, le_domxmlelementp, "s", &name, &name_len); attrp = xmlHasProp(nodep,name); - if (attrp == NULL) - { + if (attrp == NULL) { RETURN_FALSE; } DOMXML_RET_OBJ(rv, (xmlNodePtr) attrp, &ret); @@ -2990,9 +2994,12 @@ htmlDocDumpMemory(docp, &mem, &size); if (!size) { + if (mem) + xmlFree(mem); RETURN_FALSE; } RETURN_STRINGL(mem, size, 1); + xmlFree(mem); } /* }}} */ @@ -3573,9 +3580,7 @@ zval *wrapper; int rsrc_type; - if (! found) { *found = 0; - } if (!obj) { MAKE_STD_ZVAL(wrapper);
« previous php.dev (#82079) next »