cvs: php4 /ext/domxml php_domxml.c
| From: | Christian Stocker | Date: | Tue, 08 Apr 2003 19:30:27 +0000 |
| Subject: | cvs: php4 /ext/domxml php_domxml.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-20175@lists.php.net to get a copy of this message | ||
chregu Tue Apr 8 15:30:27 2003 EDT
Modified files:
/php4/ext/domxml php_domxml.c
Log:
fixes memleaks in element->get_elements_by_tagname & document->get_elements_by_tagname
Index: php4/ext/domxml/php_domxml.c
diff -u php4/ext/domxml/php_domxml.c:1.247 php4/ext/domxml/php_domxml.c:1.248
--- php4/ext/domxml/php_domxml.c:1.247 Tue Apr 8 13:22:19 2003
+++ php4/ext/domxml/php_domxml.c Tue Apr 8 15:30:27 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_domxml.c,v 1.247 2003/04/08 17:22:19 chregu Exp $ */
+/* $Id: php_domxml.c,v 1.248 2003/04/08 19:30:27 chregu Exp $ */
/* TODO
* - Support Notation Nodes
@@ -3079,6 +3079,7 @@
xmlXPathObjectPtr xpathobjp;
xmlNode *contextnodep;
int name_len;
+ int free_context = 0;
char *str,*name;
contextnode = NULL;
@@ -3089,6 +3090,7 @@
/* if no xpath_context was submitted, create a new one */
if (ctxpin == NULL) {
ctxp = xmlXPathNewContext(docp);
+ free_context = 1;
} else {
DOMXML_GET_OBJ(ctxp, ctxpin, le_xpathctxp);
}
@@ -3119,6 +3121,10 @@
if (NULL == (nodesetp = xpathobjp->nodesetval)) {
zval_dtor(rv);
+ xmlXPathFreeObject (xpathobjp);
+ if (free_context) {
+ xmlXPathFreeContext(ctxp);
+ }
RETURN_FALSE;
}
@@ -3138,6 +3144,10 @@
break;
}
+ xmlXPathFreeObject(xpathobjp);
+ if (free_context) {
+ xmlXPathFreeContext(ctxp);
+ }
*return_value = *rv;
FREE_ZVAL(rv);
}
@@ -3215,6 +3225,7 @@
zend_hash_next_index_insert(Z_ARRVAL_P(rv), &child, sizeof(zval *), NULL);
}
}
+ xmlXPathFreeNodeSet(nodesetp);
*return_value = *rv;
FREE_ZVAL(rv);