diff options
Diffstat (limited to '3rdparty/expat/tests/handlers.h')
-rw-r--r-- | 3rdparty/expat/tests/handlers.h | 615 |
1 files changed, 615 insertions, 0 deletions
diff --git a/3rdparty/expat/tests/handlers.h b/3rdparty/expat/tests/handlers.h new file mode 100644 index 00000000000..fa6267fbbd0 --- /dev/null +++ b/3rdparty/expat/tests/handlers.h @@ -0,0 +1,615 @@ +/* XML handler functions for the Expat test suite + __ __ _ + ___\ \/ /_ __ __ _| |_ + / _ \\ /| '_ \ / _` | __| + | __// \| |_) | (_| | |_ + \___/_/\_\ .__/ \__,_|\__| + |_| XML parser + + Copyright (c) 2001-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net> + Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net> + Copyright (c) 2005-2007 Steven Solie <steven@solie.ca> + Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net> + Copyright (c) 2016-2024 Sebastian Pipping <sebastian@pipping.org> + Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk> + Copyright (c) 2017 Joe Orton <jorton@redhat.com> + Copyright (c) 2017 José Gutiérrez de la Concha <jose@zeroc.com> + Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it> + Copyright (c) 2019 David Loffredo <loffredo@steptools.com> + Copyright (c) 2020 Tim Gates <tim.gates@iress.com> + Copyright (c) 2021 Donghee Na <donghee.na@python.org> + Copyright (c) 2023 Sony Corporation / Snild Dolkow <snild@sony.com> + Licensed under the MIT license: + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to permit + persons to whom the Software is furnished to do so, subject to the + following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN + NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef XML_HANDLERS_H +# define XML_HANDLERS_H + +# include "expat_config.h" + +# include "expat.h" + +/* Variable holding the expected handler userData */ +extern const void *g_handler_data; +/* Count of the number of times the comment handler has been invoked */ +extern int g_comment_count; +/* Count of the number of skipped entities */ +extern int g_skip_count; +/* Count of the number of times the XML declaration handler is invoked */ +extern int g_xdecl_count; + +/* Start/End Element Handlers */ + +extern void XMLCALL start_element_event_handler(void *userData, + const XML_Char *name, + const XML_Char **atts); + +extern void XMLCALL end_element_event_handler(void *userData, + const XML_Char *name); + +# define STRUCT_START_TAG 0 +# define STRUCT_END_TAG 1 + +extern void XMLCALL start_element_event_handler2(void *userData, + const XML_Char *name, + const XML_Char **attr); + +extern void XMLCALL end_element_event_handler2(void *userData, + const XML_Char *name); + +typedef struct attrInfo { + const XML_Char *name; + const XML_Char *value; +} AttrInfo; + +typedef struct elementInfo { + const XML_Char *name; + int attr_count; + const XML_Char *id_name; + AttrInfo *attributes; +} ElementInfo; + +typedef struct StructParserAndElementInfo { + XML_Parser parser; + ElementInfo *info; +} ParserAndElementInfo; + +extern void XMLCALL counting_start_element_handler(void *userData, + const XML_Char *name, + const XML_Char **atts); + +extern void XMLCALL suspending_end_handler(void *userData, const XML_Char *s); + +extern void XMLCALL start_element_suspender(void *userData, + const XML_Char *name, + const XML_Char **atts); + +extern int g_triplet_start_flag; +extern int g_triplet_end_flag; + +extern void XMLCALL triplet_start_checker(void *userData, const XML_Char *name, + const XML_Char **atts); + +extern void XMLCALL triplet_end_checker(void *userData, const XML_Char *name); + +extern void XMLCALL overwrite_start_checker(void *userData, + const XML_Char *name, + const XML_Char **atts); + +extern void XMLCALL overwrite_end_checker(void *userData, const XML_Char *name); + +extern void XMLCALL start_element_fail(void *userData, const XML_Char *name, + const XML_Char **atts); + +extern void XMLCALL start_ns_clearing_start_element(void *userData, + const XML_Char *prefix, + const XML_Char *uri); + +typedef struct { + XML_Parser parser; + int deep; +} DataIssue240; + +extern void XMLCALL start_element_issue_240(void *userData, + const XML_Char *name, + const XML_Char **atts); + +extern void XMLCALL end_element_issue_240(void *userData, const XML_Char *name); + +/* Text encoding handlers */ + +extern int XMLCALL UnknownEncodingHandler(void *data, const XML_Char *encoding, + XML_Encoding *info); + +extern int XMLCALL UnrecognisedEncodingHandler(void *data, + const XML_Char *encoding, + XML_Encoding *info); + +extern int XMLCALL unknown_released_encoding_handler(void *data, + const XML_Char *encoding, + XML_Encoding *info); + +extern int XMLCALL MiscEncodingHandler(void *data, const XML_Char *encoding, + XML_Encoding *info); + +extern int XMLCALL long_encoding_handler(void *userData, + const XML_Char *encoding, + XML_Encoding *info); + +/* External Entity Handlers */ + +typedef struct ExtOption { + const XML_Char *system_id; + const char *parse_text; +} ExtOption; + +extern int XMLCALL external_entity_optioner(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_loader(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +typedef struct ext_faults { + const char *parse_text; + const char *fail_text; + const XML_Char *encoding; + enum XML_Error error; +} ExtFaults; + +extern int XMLCALL external_entity_faulter(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); +extern int XMLCALL external_entity_failer__if_not_xml_ge( + XML_Parser parser, const XML_Char *context, const XML_Char *base, + const XML_Char *systemId, const XML_Char *publicId); +extern int XMLCALL external_entity_null_loader(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_resetter(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_suspender(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_suspend_xmldecl(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_suspending_faulter(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_cr_catcher(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_bad_cr_catcher(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_rsqb_catcher(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_good_cdata_ascii(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* Entity declaration handlers */ + +extern void XMLCALL entity_suspending_decl_handler(void *userData, + const XML_Char *name, + XML_Content *model); + +extern void XMLCALL entity_suspending_xdecl_handler(void *userData, + const XML_Char *version, + const XML_Char *encoding, + int standalone); + +extern int XMLCALL external_entity_param_checker(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_ref_param_checker(XML_Parser parameter, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_param(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_load_ignore(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_load_ignore_utf16(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_load_ignore_utf16_be( + XML_Parser parser, const XML_Char *context, const XML_Char *base, + const XML_Char *systemId, const XML_Char *publicId); + +extern int XMLCALL external_entity_valuer(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_not_standalone(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_value_aborter(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_public(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_devaluer(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +typedef struct ext_hdlr_data { + const char *parse_text; + XML_ExternalEntityRefHandler handler; + CharData *storage; +} ExtHdlrData; + +extern int XMLCALL external_entity_oneshot_loader(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +typedef struct ExtTest2 { + const char *parse_text; + int parse_len; + const XML_Char *encoding; + CharData *storage; +} ExtTest2; + +extern int XMLCALL external_entity_loader2(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +typedef struct ExtFaults2 { + const char *parse_text; + int parse_len; + const char *fail_text; + const XML_Char *encoding; + enum XML_Error error; +} ExtFaults2; + +extern int XMLCALL external_entity_faulter2(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_unfinished_attlist(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_handler(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_duff_loader(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_dbl_handler(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_dbl_handler_2(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_alloc_set_encoding(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_reallocator(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_alloc(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +extern int XMLCALL external_entity_parser_create_alloc_fail_handler( + XML_Parser parser, const XML_Char *context, const XML_Char *base, + const XML_Char *systemId, const XML_Char *publicId); + +struct AccountingTestCase { + const char *primaryText; + const char *firstExternalText; /* often NULL */ + const char *secondExternalText; /* often NULL */ + const unsigned long long expectedCountBytesIndirectExtra; +}; + +extern int accounting_external_entity_ref_handler(XML_Parser parser, + const XML_Char *context, + const XML_Char *base, + const XML_Char *systemId, + const XML_Char *publicId); + +/* NotStandalone handlers */ + +extern int XMLCALL reject_not_standalone_handler(void *userData); + +extern int XMLCALL accept_not_standalone_handler(void *userData); + +/* Attribute List handlers */ + +typedef struct AttTest { + const char *definition; + const XML_Char *element_name; + const XML_Char *attr_name; + const XML_Char *attr_type; + const XML_Char *default_value; + int is_required; +} AttTest; + +extern void XMLCALL verify_attlist_decl_handler( + void *userData, const XML_Char *element_name, const XML_Char *attr_name, + const XML_Char *attr_type, const XML_Char *default_value, int is_required); + +/* Character data handlers */ + +extern void XMLCALL clearing_aborting_character_handler(void *userData, + const XML_Char *s, + int len); + +extern void XMLCALL parser_stop_character_handler(void *userData, + const XML_Char *s, int len); + +extern void XMLCALL cr_cdata_handler(void *userData, const XML_Char *s, + int len); + +extern void XMLCALL rsqb_handler(void *userData, const XML_Char *s, int len); + +typedef struct ByteTestData { + int start_element_len; + int cdata_len; + int total_string_len; +} ByteTestData; + +extern void XMLCALL byte_character_handler(void *userData, const XML_Char *s, + int len); + +extern void XMLCALL ext2_accumulate_characters(void *userData, + const XML_Char *s, int len); + +/* Handlers that record their `len` arg and a single identifying character */ + +struct handler_record_entry { + const char *name; + int arg; +}; +struct handler_record_list { + int count; + struct handler_record_entry entries[50]; // arbitrary big-enough max count +}; + +extern void XMLCALL record_default_handler(void *userData, const XML_Char *s, + int len); + +extern void XMLCALL record_cdata_handler(void *userData, const XML_Char *s, + int len); + +extern void XMLCALL record_cdata_nodefault_handler(void *userData, + const XML_Char *s, int len); + +extern void XMLCALL record_skip_handler(void *userData, + const XML_Char *entityName, + int is_parameter_entity); + +extern void XMLCALL record_element_start_handler(void *userData, + const XML_Char *name, + const XML_Char **atts); + +extern void XMLCALL record_element_end_handler(void *userData, + const XML_Char *name); + +extern const struct handler_record_entry * +_handler_record_get(const struct handler_record_list *storage, int index, + const char *file, int line); + +# define handler_record_get(storage, index) \ + _handler_record_get((storage), (index), __FILE__, __LINE__) + +# define assert_record_handler_called(storage, index, expected_name, \ + expected_arg) \ + do { \ + const struct handler_record_entry *e \ + = handler_record_get(storage, index); \ + assert_true(strcmp(e->name, expected_name) == 0); \ + assert_true(e->arg == (expected_arg)); \ + } while (0) + +/* Entity Declaration Handlers */ +# define ENTITY_MATCH_FAIL (-1) +# define ENTITY_MATCH_NOT_FOUND (0) +# define ENTITY_MATCH_SUCCESS (1) + +extern void XMLCALL param_entity_match_handler( + void *userData, const XML_Char *entityName, int is_parameter_entity, + const XML_Char *value, int value_length, const XML_Char *base, + const XML_Char *systemId, const XML_Char *publicId, + const XML_Char *notationName); + +extern void param_entity_match_init(const XML_Char *name, + const XML_Char *value); + +extern int get_param_entity_match_flag(void); + +/* Misc handlers */ + +extern void XMLCALL xml_decl_handler(void *userData, const XML_Char *version, + const XML_Char *encoding, int standalone); + +extern void XMLCALL param_check_skip_handler(void *userData, + const XML_Char *entityName, + int is_parameter_entity); + +extern void XMLCALL data_check_comment_handler(void *userData, + const XML_Char *data); + +extern void XMLCALL selective_aborting_default_handler(void *userData, + const XML_Char *s, + int len); + +extern void XMLCALL suspending_comment_handler(void *userData, + const XML_Char *data); + +extern void XMLCALL element_decl_suspender(void *userData, const XML_Char *name, + XML_Content *model); + +extern void XMLCALL suspend_after_element_declaration(void *userData, + const XML_Char *name, + XML_Content *model); + +extern void XMLCALL accumulate_pi_characters(void *userData, + const XML_Char *target, + const XML_Char *data); + +extern void XMLCALL accumulate_comment(void *userData, const XML_Char *data); + +extern void XMLCALL accumulate_entity_decl( + void *userData, const XML_Char *entityName, int is_parameter_entity, + const XML_Char *value, int value_length, const XML_Char *base, + const XML_Char *systemId, const XML_Char *publicId, + const XML_Char *notationName); + +extern void XMLCALL accumulate_char_data_and_suspend(void *userData, + const XML_Char *s, + int len); + +extern void XMLCALL accumulate_start_element(void *userData, + const XML_Char *name, + const XML_Char **atts); + +extern void XMLCALL accumulate_characters(void *userData, const XML_Char *s, + int len); + +extern void XMLCALL accumulate_attribute(void *userData, const XML_Char *name, + const XML_Char **atts); + +extern void XMLCALL ext_accumulate_characters(void *userData, const XML_Char *s, + int len); + +typedef struct default_check { + const XML_Char *expected; + const int expectedLen; + XML_Bool seen; +} DefaultCheck; + +void XMLCALL checking_default_handler(void *userData, const XML_Char *s, + int len); + +typedef struct { + XML_Parser parser; + CharData *storage; +} ParserPlusStorage; + +extern void XMLCALL +accumulate_and_suspend_comment_handler(void *userData, const XML_Char *data); + +#endif /* XML_HANDLERS_H */ + +#ifdef __cplusplus +} +#endif |