SimpleXML schema validate patch
| From: | Adam Trachtenberg | Date: | Sat, 04 Oct 2003 21:12:19 +0000 |
| Subject: | SimpleXML schema validate patch | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-4675@lists.php.net to get a copy of this message | ||
Here is a patch against the latest CVS for SimpleXML to fix its schema
validation support.
It does the following:
1) Includes all the correct libxml2 schema header files.
2) Determines whether schema support is available.
3) Avoids refreeing the parser.
4) Inverts valid / invalid logic to work correctly.
Please apply.
-adam
PS: Let me know if I generated the patch incorrectly.
--
adam trachtenberg
adam@trachtenberg.com
Index: php_simplexml.h =================================================================== RCS file: /repository/php-src/ext/simplexml/php_simplexml.h,v retrieving revision 1.6 diff -u -u -r1.6 php_simplexml.h --- php_simplexml.h 14 Jun 2003 18:15:50 -0000 1.6 +++ php_simplexml.h 4 Oct 2003 21:01:10 -0000 @@ -44,6 +44,7 @@ #include <libxml/xpathInternals.h> #include <libxml/xpointer.h> #include <libxml/xmlschemas.h> +#include <libxml/schemasInternals.h> PHP_MINIT_FUNCTION(simplexml); PHP_MSHUTDOWN_FUNCTION(simplexml); Index: simplexml.c =================================================================== RCS file: /repository/php-src/ext/simplexml/simplexml.c,v retrieving revision 1.60 diff -u -u -r1.60 simplexml.c --- simplexml.c 2 Oct 2003 19:45:05 -0000 1.60 +++ simplexml.c 4 Oct 2003 21:01:10 -0000 @@ -573,7 +573,7 @@ #define SCHEMA_BLOB 1 #define SCHEMA_OBJECT 2 -#ifdef xmlSchemaParserCtxtPtr +#ifdef LIBXML_SCHEMAS_ENABLED /* {{{ simplexml_ce_schema_validate_file() */ @@ -585,7 +585,7 @@ xmlSchemaParserCtxtPtr parser; xmlSchemaPtr sptr; xmlSchemaValidCtxtPtr vptr; - int is_valid; + int is_invalid; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &source) == FAILURE) { return; @@ -598,26 +598,24 @@ convert_to_string_ex(&source); parser = xmlSchemaNewParserCtxt(Z_STRVAL_P(source)); sptr = xmlSchemaParse(parser); - xmlSchemaFreeParserCtxt(parser); break; case SCHEMA_BLOB: convert_to_string_ex(&source); parser = xmlSchemaNewMemParserCtxt(Z_STRVAL_P(source), Z_STRLEN_P(source)); sptr = xmlSchemaParse(parser); - xmlSchemaFreeParserCtxt(parser); break; } vptr = xmlSchemaNewValidCtxt(sptr); - is_valid = xmlSchemaValidateDoc(vptr, (xmlDocPtr) sxe->document->ptr); + is_invalid = xmlSchemaValidateDoc(vptr, (xmlDocPtr) sxe->document->ptr); xmlSchemaFree(sptr); xmlSchemaFreeValidCtxt(vptr); xmlSchemaFreeParserCtxt(parser); - if (is_valid) { - RETURN_TRUE; - } else { + if (is_invalid) { RETURN_FALSE; + } else { + RETURN_TRUE; } } /* }}} */ @@ -695,7 +693,7 @@ { if (!strcmp(method, "xsearch")) { simplexml_ce_xpath_search(INTERNAL_FUNCTION_PARAM_PASSTHRU); -#ifdef xmlSchemaParserCtxtPtr +#ifdef LIBXML_SCHEMAS_ENABLED } else if (!strcmp(method, "validate_schema_file")) { simplexml_ce_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, SCHEMA_FILE); } else if (!strcmp(method, "validate_schema_buffer")) {
Index: php_simplexml.h =================================================================== RCS file: /repository/php-src/ext/simplexml/php_simplexml.h,v retrieving revision 1.6 diff -u -u -r1.6 php_simplexml.h --- php_simplexml.h 14 Jun 2003 18:15:50 -0000 1.6 +++ php_simplexml.h 4 Oct 2003 21:01:10 -0000 @@ -44,6 +44,7 @@ #include <libxml/xpathInternals.h> #include <libxml/xpointer.h> #include <libxml/xmlschemas.h> +#include <libxml/schemasInternals.h> PHP_MINIT_FUNCTION(simplexml); PHP_MSHUTDOWN_FUNCTION(simplexml); Index: simplexml.c =================================================================== RCS file: /repository/php-src/ext/simplexml/simplexml.c,v retrieving revision 1.60 diff -u -u -r1.60 simplexml.c --- simplexml.c 2 Oct 2003 19:45:05 -0000 1.60 +++ simplexml.c 4 Oct 2003 21:01:10 -0000 @@ -573,7 +573,7 @@ #define SCHEMA_BLOB 1 #define SCHEMA_OBJECT 2 -#ifdef xmlSchemaParserCtxtPtr +#ifdef LIBXML_SCHEMAS_ENABLED /* {{{ simplexml_ce_schema_validate_file() */ @@ -585,7 +585,7 @@ xmlSchemaParserCtxtPtr parser; xmlSchemaPtr sptr; xmlSchemaValidCtxtPtr vptr; - int is_valid; + int is_invalid; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &source) == FAILURE) { return; @@ -598,26 +598,24 @@ convert_to_string_ex(&source); parser = xmlSchemaNewParserCtxt(Z_STRVAL_P(source)); sptr = xmlSchemaParse(parser); - xmlSchemaFreeParserCtxt(parser); break; case SCHEMA_BLOB: convert_to_string_ex(&source); parser = xmlSchemaNewMemParserCtxt(Z_STRVAL_P(source), Z_STRLEN_P(source)); sptr = xmlSchemaParse(parser); - xmlSchemaFreeParserCtxt(parser); break; } vptr = xmlSchemaNewValidCtxt(sptr); - is_valid = xmlSchemaValidateDoc(vptr, (xmlDocPtr) sxe->document->ptr); + is_invalid = xmlSchemaValidateDoc(vptr, (xmlDocPtr) sxe->document->ptr); xmlSchemaFree(sptr); xmlSchemaFreeValidCtxt(vptr); xmlSchemaFreeParserCtxt(parser); - if (is_valid) { - RETURN_TRUE; - } else { + if (is_invalid) { RETURN_FALSE; + } else { + RETURN_TRUE; } } /* }}} */ @@ -695,7 +693,7 @@ { if (!strcmp(method, "xsearch")) { simplexml_ce_xpath_search(INTERNAL_FUNCTION_PARAM_PASSTHRU); -#ifdef xmlSchemaParserCtxtPtr +#ifdef LIBXML_SCHEMAS_ENABLED } else if (!strcmp(method, "validate_schema_file")) { simplexml_ce_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, SCHEMA_FILE); } else if (!strcmp(method, "validate_schema_buffer")) {