cvs: php-src /ext/xml compat.c
| From: | Christian Stocker | Date: | Mon, 23 Feb 2004 15:43:49 +0000 |
| Subject: | cvs: php-src /ext/xml compat.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-26350@lists.php.net to get a copy of this message | ||
chregu Mon Feb 23 10:43:49 2004 EDT
Modified files:
/php-src/ext/xml compat.c
Log:
fix attribute handling in combination with sax2
http://cvs.php.net/diff.php/php-src/ext/xml/compat.c?r1=1.28&r2=1.29&ty=u
Index: php-src/ext/xml/compat.c
diff -u php-src/ext/xml/compat.c:1.28 php-src/ext/xml/compat.c:1.29
--- php-src/ext/xml/compat.c:1.28 Mon Feb 23 04:19:25 2004
+++ php-src/ext/xml/compat.c Mon Feb 23 10:43:49 2004
@@ -71,13 +71,39 @@
{
XML_Parser parser = (XML_Parser) user;
xmlChar *qualified_name = NULL;
-
+ xmlChar **attrs = NULL;
+ int i;
+ int z = 0;
+ int y = 0;
+
if (parser->h_start_element == NULL) {
return;
}
_qualify_namespace(parser, name, URI, &qualified_name);
- parser->h_start_element(parser->user, (const XML_Char *) qualified_name, (const XML_Char **)
attributes);
-
+
+ if (attributes != NULL) {
+ attrs = safe_emalloc((nb_attributes * 2) + 1, sizeof(int *), 0);
+ xmlChar *qualified_name_attr = NULL;
+
+ for (i = 0; i < nb_attributes; i += 1) {
+ attrs[z] = xmlStrdup( attributes[y]);
+
+ if (attributes[y+1] != NULL) {
+ _qualify_namespace(parser, xmlStrndup(attributes[y + 3] , (int) (attributes[y + 4] -
attributes[y + 3])), attributes[2], &qualified_name_attr);
+ } else {
+ qualified_name_attr = xmlStrndup(attributes[y + 3] , (int) (attributes[y + 4] - attributes[y +
3]));
+ }
+ attrs[z + 1] = qualified_name_attr;
+ z += 2;
+ y += 5;
+ }
+
+ attrs[z] = NULL;
+ }
+ parser->h_start_element(parser->user, (const XML_Char *) qualified_name, (const XML_Char **)
attrs);
+ if (attrs) {
+ efree(attrs);
+ }
xmlFree(qualified_name);
}
#endif