rrichards Tue Jul 1 15:28:30 2003 EDT
Modified files:
/php-src/ext/dom document.c
Log:
fix load() and loadxml() when used with uninstantiated object
Index: php-src/ext/dom/document.c
diff -u php-src/ext/dom/document.c:1.7 php-src/ext/dom/document.c:1.8
--- php-src/ext/dom/document.c:1.7 Sun Jun 15 15:58:42 2003
+++ php-src/ext/dom/document.c Tue Jul 1 15:28:30 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: document.c,v 1.7 2003/06/15 19:58:42 rrichards Exp $ */
+/* $Id: document.c,v 1.8 2003/07/01 19:28:30 rrichards Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -997,11 +997,11 @@
*/
PHP_FUNCTION(dom_document_load)
{
- zval *id;
+ zval *id, *rv = NULL;
xmlDoc *docp = NULL, *newdoc;
dom_object *intern;
char *source;
- int source_len, refcount;
+ int source_len, refcount, ret;
id = getThis();
@@ -1009,27 +1009,31 @@
return;
}
- newdoc = docp = xmlParseFile(source);
+ newdoc = xmlParseFile(source);
if (!newdoc)
RETURN_FALSE;
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- docp = (xmlDocPtr)intern->ptr;
- if (docp != NULL) {
- refcount = decrement_document_reference(intern TSRMLS_CC);
- if (refcount != 0) {
- docp->_private = NULL;
+ if (id != NULL) {
+ intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+ if (intern != NULL) {
+ docp = (xmlDocPtr)intern->ptr;
+ if (docp != NULL) {
+ refcount = decrement_document_reference(intern
TSRMLS_CC);
+ if (refcount != 0) {
+ docp->_private = NULL;
+ }
}
+ intern->document = NULL;
+ increment_document_reference(intern, newdoc TSRMLS_CC);
}
- intern->document = NULL;
- increment_document_reference(intern, newdoc TSRMLS_CC);
- }
- php_dom_set_object(intern, newdoc TSRMLS_CC);
+ php_dom_set_object(intern, newdoc TSRMLS_CC);
- RETURN_TRUE;
+ RETURN_TRUE;
+ } else {
+ DOM_RET_OBJ(rv, (xmlNodePtr) newdoc, &ret, NULL);
+ }
}
/* }}} end dom_document_load */
@@ -1039,11 +1043,11 @@
*/
PHP_FUNCTION(dom_document_loadxml)
{
- zval *id;
+ zval *id, *rv = NULL;
xmlDoc *docp = NULL, *newdoc;
dom_object *intern;
char *buffer;
- int buffer_len, refcount;
+ int buffer_len, refcount, ret;
id = getThis();
@@ -1055,23 +1059,27 @@
if (!newdoc)
RETURN_FALSE;
- intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
- if (intern != NULL) {
- docp = (xmlDocPtr)intern->ptr;
- if (docp != NULL) {
- refcount = decrement_document_reference(intern TSRMLS_CC);
- if (refcount != 0) {
- docp->_private = NULL;
+ if (id != NULL) {
+ intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+ if (intern != NULL) {
+ docp = (xmlDocPtr)intern->ptr;
+ if (docp != NULL) {
+ refcount = decrement_document_reference(intern
TSRMLS_CC);
+ if (refcount != 0) {
+ docp->_private = NULL;
+ }
+ intern->document = NULL;
}
intern->document = NULL;
+ increment_document_reference(intern, newdoc TSRMLS_CC);
}
- intern->document = NULL;
- increment_document_reference(intern, newdoc TSRMLS_CC);
- }
- php_dom_set_object(intern, newdoc TSRMLS_CC);
+ php_dom_set_object(intern, newdoc TSRMLS_CC);
- RETURN_TRUE;
+ RETURN_TRUE;
+ } else {
+ DOM_RET_OBJ(rv, (xmlNodePtr) newdoc, &ret, NULL);
+ }
}
/* }}} end dom_document_loadxml */
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php