helly Tue May 23 21:37:18 2006 UTC
Modified files:
/php-src/ext/simplexml simplexml.c
Log:
- Fix SEGV in case class to generate is not derived from SimpleXMLElement
by issueing an error
http://cvs.php.net/viewcvs.cgi/php-src/ext/simplexml/simplexml.c?r1=1.207&r2=1.208&diff_format=u
Index: php-src/ext/simplexml/simplexml.c
diff -u php-src/ext/simplexml/simplexml.c:1.207
php-src/ext/simplexml/simplexml.c:1.208
--- php-src/ext/simplexml/simplexml.c:1.207 Wed May 17 00:07:05 2006
+++ php-src/ext/simplexml/simplexml.c Tue May 23 21:37:17 2006
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: simplexml.c,v 1.207 2006/05/17 00:07:05 helly Exp $ */
+/* $Id: simplexml.c,v 1.208 2006/05/23 21:37:17 helly Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -1830,13 +1830,13 @@
char *filename;
int filename_len;
xmlDocPtr docp;
- char *classname = NULL, *ns = NULL;
- int classname_len = 0, ns_len = 0;
+ char *ns = NULL;
+ int ns_len = 0;
long options = 0;
zend_class_entry *ce= sxe_class_entry;
zend_bool isprefix = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|slsb",
&filename, &filename_len, &classname, &classname_len, &options, &ns, &ns_len,
&isprefix) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|Clsb",
&filename, &filename_len, &ce, &options, &ns, &ns_len, &isprefix) == FAILURE) {
return;
}
@@ -1846,14 +1846,6 @@
RETURN_FALSE;
}
- if (classname_len) {
- zend_class_entry **pce;
- if (zend_lookup_class(classname, classname_len, &pce TSRMLS_CC)
== FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s
does not exist", classname);
- }
- ce = *pce;
- }
-
sxe = php_sxe_object_new(ce TSRMLS_CC);
sxe->iter.nsprefix = ns_len ? xmlStrdup(ns) : NULL;
sxe->iter.isprefix = isprefix;
@@ -1873,13 +1865,13 @@
char *data;
int data_len;
xmlDocPtr docp;
- char *classname = NULL, *ns = NULL;
- int classname_len = 0, ns_len = 0;
+ char *ns = NULL;
+ int ns_len = 0;
long options = 0;
zend_class_entry *ce= sxe_class_entry;
zend_bool isprefix = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|slsb", &data,
&data_len, &classname, &classname_len, &options, &ns, &ns_len, &isprefix) ==
FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|Clsb", &data,
&data_len, &ce, &options, &ns, &ns_len, &isprefix) == FAILURE) {
return;
}
@@ -1889,14 +1881,6 @@
RETURN_FALSE;
}
- if (classname_len) {
- zend_class_entry **pce;
- if (zend_lookup_class(classname, classname_len, &pce TSRMLS_CC)
== FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s
does not exist", classname);
- }
- ce = *pce;
- }
-
sxe = php_sxe_object_new(ce TSRMLS_CC);
sxe->iter.nsprefix = ns_len ? xmlStrdup(ns) : NULL;
sxe->iter.isprefix = isprefix;
@@ -2144,11 +2128,9 @@
zval *node;
php_libxml_node_object *object;
xmlNodePtr nodep = NULL;
- char *classname = "";
- int classname_len = 0;
zend_class_entry *ce= sxe_class_entry;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|s", &node,
&classname, &classname_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o|C", &node, &ce)
== FAILURE) {
return;
}
@@ -2167,14 +2149,6 @@
}
if (nodep && nodep->type == XML_ELEMENT_NODE) {
- if (classname_len) {
- zend_class_entry **pce;
- if (zend_lookup_class(classname, classname_len, &pce
TSRMLS_CC) == FAILURE) {
- php_error_docref(NULL TSRMLS_CC, E_ERROR,
"Class %s does not exist", classname);
- }
- ce = *pce;
- }
-
sxe = php_sxe_object_new(ce TSRMLS_CC);
sxe->document = object->document;
php_libxml_increment_doc_ref((php_libxml_node_object *)sxe,
nodep->doc TSRMLS_CC);
@@ -2279,7 +2253,7 @@
{
php_info_print_table_start();
php_info_print_table_header(2, "Simplexml support", "enabled");
- php_info_print_table_row(2, "Revision", "$Revision: 1.207 $");
+ php_info_print_table_row(2, "Revision", "$Revision: 1.208 $");
php_info_print_table_row(2, "Schema support",
#ifdef LIBXML_SCHEMAS_ENABLED
"enabled");
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php