31#include <libxml/xmlreader.h>
32#include <libxml/uri.h>
45typedef unsigned char *(*xmlreader_read_char_t)(xmlTextReaderPtr reader);
46typedef const unsigned char *(*xmlreader_read_const_char_t)(xmlTextReaderPtr reader);
48typedef unsigned char *(*xmlreader_read_one_char_t)(xmlTextReaderPtr reader,
const unsigned char *);
56#define XMLREADER_LOAD_STRING 0
57#define XMLREADER_LOAD_FILE 1
62 zend_hash_add_new_ptr(prop_handler, str, (
void *) hnd);
66#define XMLREADER_REGISTER_PROP_HANDLER(prop_handler, name, prop_read_int_func, prop_read_char_func, prop_type) do { \
67 static const xmlreader_prop_handler hnd = {.read_int_func = prop_read_int_func, .read_char_func = prop_read_char_func, .type = prop_type}; \
68 xmlreader_register_prop_handler(prop_handler, "" name, sizeof("" name) - 1, &hnd); \
74 const xmlChar *retchar =
NULL;
120 }
else if (cache_slot) {
121 cache_slot[0] = cache_slot[1] = cache_slot[2] =
NULL;
139 if (xmlreader_property_reader(obj, hnd, &
rv) ==
FAILURE) {
170 if (xmlreader_property_reader(obj, hnd,
rv) ==
FAILURE) {
240 if (xmlreader_property_reader(obj, entry, &
value) ==
SUCCESS) {
257 uri = xmlCreateURI();
261 escsource = xmlURIEscapeStr((xmlChar *)source, (xmlChar *)
":");
262 xmlParseURIReference(uri, (
const char *)escsource);
265 if (uri->scheme !=
NULL) {
274 }
else if (
strncasecmp(source,
"file://localhost/",17) == 0) {
286 if ((uri->scheme ==
NULL || isFileUri)) {
291 file_dest = resolved_path;
300#ifdef LIBXML_SCHEMAS_ENABLED
302static xmlRelaxNGPtr _xmlreader_get_relaxNG(
char *source,
size_t source_len,
size_t type,
303 xmlRelaxNGValidityErrorFunc error_func,
304 xmlRelaxNGValidityWarningFunc warn_func)
306 char *valid_file =
NULL;
307 xmlRelaxNGParserCtxtPtr parser =
NULL;
317 parser = xmlRelaxNGNewParserCtxt(valid_file);
320 parser = xmlRelaxNGNewMemParserCtxt(source, source_len);
328 if (parser ==
NULL) {
332 PHP_LIBXML_SANITIZE_GLOBALS(parse);
333 if (error_func || warn_func) {
334 xmlRelaxNGSetParserErrors(parser,
335 (xmlRelaxNGValidityErrorFunc) error_func,
336 (xmlRelaxNGValidityWarningFunc) warn_func,
339 sptr = xmlRelaxNGParse(parser);
340 xmlRelaxNGFreeParserCtxt(parser);
341 PHP_LIBXML_RESTORE_GLOBALS(parse);
372#ifdef COMPILE_DL_XMLREADER
379 xmlFreeParserInputBuffer(intern->
input);
384 xmlFreeTextReader(intern->
ptr);
387#ifdef LIBXML_SCHEMAS_ENABLED
389 xmlRelaxNGFree((xmlRelaxNGPtr) intern->
schema);
403 xmlreader_free_resources(intern);
424 char *retchar =
NULL;
441 retchar = (
char *)internal_function(intern->
ptr, (
const unsigned char *)
name);
480 char *retchar =
NULL;
491 retchar = (
char *)internal_function(intern->
ptr);
505#ifdef LIBXML_SCHEMAS_ENABLED
507 size_t source_len = 0;
510 xmlRelaxNGPtr schema =
NULL;
517 if (source !=
NULL && !source_len) {
527 schema = _xmlreader_get_relaxNG(source, source_len,
type,
NULL,
NULL);
529 retval = xmlTextReaderRelaxNGSetSchema(intern->
ptr, schema);
538 xmlRelaxNGFree((xmlRelaxNGPtr) intern->
schema);
574 xmlreader_free_resources(intern);
592 char *retchar =
NULL;
603 retchar = (
char *)xmlTextReaderGetAttributeNo(intern->
ptr, attr_pos);
616 size_t name_len = 0, ns_uri_len = 0;
618 char *
name, *ns_uri, *retchar =
NULL;
629 if (ns_uri_len == 0) {
638 retchar = (
char *)xmlTextReaderGetAttributeNs(intern->
ptr, (xmlChar *)
name, (xmlChar *)ns_uri);
661 if (!intern || !intern->
ptr) {
714 retval = xmlTextReaderMoveToAttribute(intern->
ptr, (xmlChar *)
name);
741 retval = xmlTextReaderMoveToAttributeNo(intern->
ptr, attr_pos);
756 size_t name_len=0, ns_uri_len=0;
770 if (ns_uri_len == 0) {
779 retval = xmlTextReaderMoveToAttributeNs(intern->
ptr, (xmlChar *)
name, (xmlChar *)ns_uri);
855 if (xmlStrEqual(xmlTextReaderConstLocalName(intern->
ptr), (xmlChar *)
name)) {
871static bool xmlreader_valid_encoding(
const char *
encoding)
879 xmlCharEncodingHandlerPtr
handler = xmlFindCharEncodingHandler(
encoding);
891 size_t source_len = 0, encoding_len = 0;
894 char *source, *valid_file =
NULL;
897 xmlTextReaderPtr reader =
NULL;
907 xmlreader_free_resources(intern);
915 if (!xmlreader_valid_encoding(
encoding)) {
923 PHP_LIBXML_SANITIZE_GLOBALS(reader_for_file);
925 PHP_LIBXML_RESTORE_GLOBALS(reader_for_file);
928 if (reader ==
NULL) {
940 xmlFreeTextReader(reader);
944 intern->
ptr = reader;
948 intern->
ptr = reader;
975static int xml_reader_stream_close(
void *
context)
988 char *document_uri =
NULL;
989 char *encoding_name =
NULL;
990 size_t document_uri_len, encoding_name_len;
1003 if (!xmlreader_valid_encoding(encoding_name)) {
1008 PHP_LIBXML_SANITIZE_GLOBALS(reader_for_stream);
1009 xmlTextReaderPtr reader = xmlReaderForIO(
1010 xml_reader_stream_read,
1011 xml_reader_stream_close,
1017 PHP_LIBXML_RESTORE_GLOBALS(reader_for_stream);
1029 intern->
ptr = reader;
1031 xmlFreeTextReader(reader);
1066#ifdef LIBXML_SCHEMAS_ENABLED
1068 size_t source_len = 0;
1077 if (source !=
NULL && !source_len) {
1085 if (intern && intern->
ptr) {
1086 PHP_LIBXML_SANITIZE_GLOBALS(schema);
1087 retval = xmlTextReaderSchemaValidate(intern->
ptr, source);
1088 PHP_LIBXML_RESTORE_GLOBALS(schema);
1123 if (!intern || !intern->
ptr) {
1162 size_t source_len = 0, encoding_len = 0;
1166 int resolved_path_len,
ret = 0;
1168 xmlParserInputBufferPtr inputbfr;
1169 xmlTextReaderPtr reader;
1179 xmlreader_free_resources(intern);
1187 if (!xmlreader_valid_encoding(
encoding)) {
1192 inputbfr = xmlParserInputBufferCreateMem(source, source_len, XML_CHAR_ENCODING_NONE);
1194 if (inputbfr !=
NULL) {
1198#elif defined(HAVE_GETWD)
1202 resolved_path_len =
strlen(resolved_path);
1203 if (resolved_path[resolved_path_len - 1] !=
DEFAULT_SLASH) {
1205 resolved_path[++resolved_path_len] =
'\0';
1207 uri = (
char *) xmlCanonicPath((
const xmlChar *) resolved_path);
1209 PHP_LIBXML_SANITIZE_GLOBALS(text_reader);
1210 reader = xmlNewTextReader(inputbfr, uri);
1212 if (reader !=
NULL) {
1218 xmlFreeParserInputBuffer(inputbfr);
1219 xmlFreeTextReader(reader);
1226 intern->
input = inputbfr;
1227 intern->
ptr = reader;
1233 PHP_LIBXML_RESTORE_GLOBALS(text_reader);
1237 PHP_LIBXML_RESTORE_GLOBALS(text_reader);
1245 xmlFreeParserInputBuffer(inputbfr);
1274 xmlNode *node, *nodec;
1275 xmlDocPtr docp =
NULL;
1276 php_libxml_node_object *domobj =
NULL;
1283 if (basenode !=
NULL) {
1285 domobj = Z_LIBXML_NODE_P(basenode);
1290 node = domobj->node->node;
1297 node = xmlTextReaderExpand(intern->
ptr);
1303 nodec = xmlDocCopyNode(node, docp, 1);
1304 if (nodec ==
NULL) {
1328static zend_result xmlreader_fixup_temporaries(
void) {
1330 ++xmlreader_open_fn.T;
1331 ++xmlreader_xml_fn.T;
1337 if (prev_zend_post_startup_cb) {
1338 return prev_zend_post_startup_cb();
1350 xmlreader_object_handlers.has_property = xmlreader_has_property;
1355 xmlreader_object_handlers.get_method = xmlreader_get_method;
1356 xmlreader_object_handlers.clone_obj =
NULL;
1357 xmlreader_object_handlers.get_debug_info = xmlreader_get_debug_info;
PHP_DOM_EXPORT zend_class_entry * dom_node_class_entry
PHPAPI char * expand_filepath(const char *filepath, char *real_path)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
php_info_print_table_start()
php_info_print_table_row(2, "PDO Driver for Firebird", "enabled")
php_info_print_table_end()
#define PHP_MSHUTDOWN_FUNCTION
#define PHP_MINIT_FUNCTION
#define PHP_MINFO_FUNCTION
PHP_JSON_API size_t int options
unsigned char key[REFLECTION_KEY_LEN]
xmlCharEncodingHandlerPtr encoding
struct _php_stream php_stream
#define php_stream_read(stream, buf, count)
#define php_stream_from_res(xstr, res)
char * _xmlreader_get_valid_file_path(char *source, char *resolved_path, int resolved_path_len)
zend_module_entry xmlreader_module_entry
zend_class_entry * xmlreader_class_entry
void xmlreader_unset_property(zend_object *object, zend_string *name, void **cache_slot)
void xmlreader_objects_free_storage(zend_object *object)
const unsigned char *(* xmlreader_read_const_char_t)(xmlTextReaderPtr reader)
#define XMLREADER_REGISTER_PROP_HANDLER(prop_handler, name, prop_read_int_func, prop_read_char_func, prop_type)
unsigned char *(* xmlreader_read_char_t)(xmlTextReaderPtr reader)
zval * xmlreader_read_property(zend_object *object, zend_string *name, int type, void **cache_slot, zval *rv)
#define XMLREADER_LOAD_STRING
zend_object * xmlreader_objects_new(zend_class_entry *class_type)
zval * xmlreader_get_property_ptr_ptr(zend_object *object, zend_string *name, int type, void **cache_slot)
struct _xmlreader_prop_handler xmlreader_prop_handler
int(* xmlreader_read_int_t)(xmlTextReaderPtr reader)
zval * xmlreader_write_property(zend_object *object, zend_string *name, zval *value, void **cache_slot)
#define XMLREADER_LOAD_FILE
unsigned char *(* xmlreader_read_one_char_t)(xmlTextReaderPtr reader, const unsigned char *)
struct _xmlreader_object xmlreader_object
#define PHP_XMLREADER_VERSION
#define Z_XMLREADER_P(zv)
xmlParserInputBufferPtr input
xmlreader_read_const_char_t read_char_func
xmlreader_read_int_t read_int_func
struct _zend_function::@236135173067030250234125302313220025134003177336 common
struct _dom_object dom_object
#define DOM_RET_OBJ(obj, domobject)
ZEND_API zend_result(* zend_post_startup_cb)(void)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
#define INTERNAL_FUNCTION_PARAMETERS
#define INTERNAL_FUNCTION_PARAM_PASSTHRU
ZEND_API zend_result object_init_with_constructor(zval *arg, zend_class_entry *class_type, uint32_t param_count, zval *params, HashTable *named_params)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API ZEND_COLD void zend_argument_must_not_be_empty_error(uint32_t arg_num)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
#define Z_PARAM_PATH_OR_NULL(dest, dest_len)
#define ZEND_PARSE_PARAMETERS_END()
#define Z_PARAM_RESOURCE(dest)
#define ZVAL_STRING(z, s)
#define ZEND_GET_MODULE(name)
#define zend_parse_parameters_none()
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define RETVAL_EMPTY_STRING()
#define Z_PARAM_LONG(dest)
#define ZVAL_EMPTY_STRING(z)
zend_string_release_ex(func->internal_function.function_name, 0)
#define ZEND_INTERNAL_FUNCTION
struct _zend_internal_function zend_internal_function
#define strncasecmp(s1, s2, n)
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_readonly_property_modification_error_ex(const char *class_name, const char *prop_name)
ZEND_API void(ZEND_FASTCALL *zend_touch_vm_stack_data)(void *vm_stack_data)
union _zend_function zend_function
ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht)
ZEND_API HashTable *ZEND_FASTCALL zend_array_dup(HashTable *source)
ZEND_API zval *ZEND_FASTCALL zend_hash_update(HashTable *ht, zend_string *key, zval *pData)
#define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent)
#define ZEND_HASH_MAP_FOREACH_STR_KEY_PTR(ht, _key, _ptr)
#define ZEND_HASH_FOREACH_END()
ZEND_API zend_result ZEND_FASTCALL zend_list_delete(zend_resource *res)
struct _zend_string zend_string
#define ZEND_MAP_PTR(ptr)
struct _zend_module_dep zend_module_dep
struct _zend_module_entry zend_module_entry
#define STANDARD_MODULE_PROPERTIES
#define ZEND_MOD_REQUIRED(name)
#define STANDARD_MODULE_HEADER_EX
ZEND_API zval * zend_std_get_property_ptr_ptr(zend_object *zobj, zend_string *name, int type, void **cache_slot)
ZEND_API zend_function * zend_std_get_method(zend_object **obj_ptr, zend_string *method_name, const zval *key)
ZEND_API HashTable * zend_std_get_properties(zend_object *zobj)
ZEND_API int zend_std_has_property(zend_object *zobj, zend_string *name, int has_set_exists, void **cache_slot)
ZEND_API const zend_object_handlers std_object_handlers
ZEND_API zval * zend_std_write_property(zend_object *zobj, zend_string *name, zval *value, void **cache_slot)
ZEND_API void zend_std_unset_property(zend_object *zobj, zend_string *name, void **cache_slot)
ZEND_API zval * zend_std_read_property(zend_object *zobj, zend_string *name, int type, void **cache_slot, zval *rv)
#define ZEND_PROPERTY_ISSET
#define ZEND_PROPERTY_NOT_EMPTY
#define ZEND_PROPERTY_EXISTS
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
#define ZEND_OBSERVER_ENABLED
ZEND_API bool ZEND_FASTCALL zend_is_true(const zval *op)
#define EXPECTED(condition)
#define XtOffsetOf(s_type, field)
#define ZEND_UNREACHABLE()
#define EMPTY_SWITCH_DEFAULT_CASE()
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
ZEND_API zend_string_init_interned_func_t zend_string_init_interned
struct _zend_resource zend_resource
struct _zend_array HashTable
#define Z_OBJCE_P(zval_p)
ZEND_RESULT_CODE zend_result
struct _zend_object_handlers zend_object_handlers
ZEND_API void zval_ptr_dtor(zval *zval_ptr)
#define VCWD_GETCWD(buff, size)
#define VCWD_REALPATH(path, real_path)
fbc internal_function handler(call, ret)