| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606 |
- /* XML handler functions for the Expat test suite
- __ __ _
- ___\ \/ /_ __ __ _| |_
- / _ \\ /| '_ \ / _` | __|
- | __// \| |_) | (_| | |_
- \___/_/\_\ .__/ \__,_|\__|
- |_| XML parser
- Copyright (c) 2001-2006 Fred L. Drake, Jr. <[email protected]>
- Copyright (c) 2003 Greg Stein <[email protected]>
- Copyright (c) 2005-2007 Steven Solie <[email protected]>
- Copyright (c) 2005-2012 Karl Waclawek <[email protected]>
- Copyright (c) 2016-2024 Sebastian Pipping <[email protected]>
- Copyright (c) 2017-2022 Rhodri James <[email protected]>
- Copyright (c) 2017 Joe Orton <[email protected]>
- Copyright (c) 2017 José Gutiérrez de la Concha <[email protected]>
- Copyright (c) 2018 Marco Maggi <[email protected]>
- Copyright (c) 2019 David Loffredo <[email protected]>
- Copyright (c) 2020 Tim Gates <[email protected]>
- Copyright (c) 2021 Donghee Na <[email protected]>
- Copyright (c) 2023 Sony Corporation / Snild Dolkow <[email protected]>
- 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;
- } 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 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_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
|