xref: /openbsd-src/lib/libexpat/tests/handlers.h (revision aa071e6ed2e21e8e72a6aac46533908f2defbdef)
1bd8f1dc3Sbluhm /* XML handler functions for the Expat test suite
2bd8f1dc3Sbluhm                             __  __            _
3bd8f1dc3Sbluhm                          ___\ \/ /_ __   __ _| |_
4bd8f1dc3Sbluhm                         / _ \\  /| '_ \ / _` | __|
5bd8f1dc3Sbluhm                        |  __//  \| |_) | (_| | |_
6bd8f1dc3Sbluhm                         \___/_/\_\ .__/ \__,_|\__|
7bd8f1dc3Sbluhm                                  |_| XML parser
8bd8f1dc3Sbluhm 
9bd8f1dc3Sbluhm    Copyright (c) 2001-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
10bd8f1dc3Sbluhm    Copyright (c) 2003      Greg Stein <gstein@users.sourceforge.net>
11bd8f1dc3Sbluhm    Copyright (c) 2005-2007 Steven Solie <steven@solie.ca>
12bd8f1dc3Sbluhm    Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net>
13bd8f1dc3Sbluhm    Copyright (c) 2016-2024 Sebastian Pipping <sebastian@pipping.org>
14bd8f1dc3Sbluhm    Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk>
15bd8f1dc3Sbluhm    Copyright (c) 2017      Joe Orton <jorton@redhat.com>
16bd8f1dc3Sbluhm    Copyright (c) 2017      José Gutiérrez de la Concha <jose@zeroc.com>
17bd8f1dc3Sbluhm    Copyright (c) 2018      Marco Maggi <marco.maggi-ipsu@poste.it>
18bd8f1dc3Sbluhm    Copyright (c) 2019      David Loffredo <loffredo@steptools.com>
19bd8f1dc3Sbluhm    Copyright (c) 2020      Tim Gates <tim.gates@iress.com>
20bd8f1dc3Sbluhm    Copyright (c) 2021      Donghee Na <donghee.na@python.org>
21bd8f1dc3Sbluhm    Copyright (c) 2023      Sony Corporation / Snild Dolkow <snild@sony.com>
22bd8f1dc3Sbluhm    Licensed under the MIT license:
23bd8f1dc3Sbluhm 
24bd8f1dc3Sbluhm    Permission is  hereby granted,  free of charge,  to any  person obtaining
25bd8f1dc3Sbluhm    a  copy  of  this  software   and  associated  documentation  files  (the
26bd8f1dc3Sbluhm    "Software"),  to  deal in  the  Software  without restriction,  including
27bd8f1dc3Sbluhm    without  limitation the  rights  to use,  copy,  modify, merge,  publish,
28bd8f1dc3Sbluhm    distribute, sublicense, and/or sell copies of the Software, and to permit
29bd8f1dc3Sbluhm    persons  to whom  the Software  is  furnished to  do so,  subject to  the
30bd8f1dc3Sbluhm    following conditions:
31bd8f1dc3Sbluhm 
32bd8f1dc3Sbluhm    The above copyright  notice and this permission notice  shall be included
33bd8f1dc3Sbluhm    in all copies or substantial portions of the Software.
34bd8f1dc3Sbluhm 
35bd8f1dc3Sbluhm    THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
36bd8f1dc3Sbluhm    EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
37bd8f1dc3Sbluhm    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
38bd8f1dc3Sbluhm    NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
39bd8f1dc3Sbluhm    DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
40bd8f1dc3Sbluhm    OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
41bd8f1dc3Sbluhm    USE OR OTHER DEALINGS IN THE SOFTWARE.
42bd8f1dc3Sbluhm */
43bd8f1dc3Sbluhm 
44bd8f1dc3Sbluhm #ifdef __cplusplus
45bd8f1dc3Sbluhm extern "C" {
46bd8f1dc3Sbluhm #endif
47bd8f1dc3Sbluhm 
48bd8f1dc3Sbluhm #ifndef XML_HANDLERS_H
49bd8f1dc3Sbluhm #  define XML_HANDLERS_H
50bd8f1dc3Sbluhm 
51bd8f1dc3Sbluhm #  include "expat_config.h"
52bd8f1dc3Sbluhm 
53bd8f1dc3Sbluhm #  include "expat.h"
54bd8f1dc3Sbluhm 
55bd8f1dc3Sbluhm /* Variable holding the expected handler userData */
56bd8f1dc3Sbluhm extern const void *g_handler_data;
57bd8f1dc3Sbluhm /* Count of the number of times the comment handler has been invoked */
58bd8f1dc3Sbluhm extern int g_comment_count;
59bd8f1dc3Sbluhm /* Count of the number of skipped entities */
60bd8f1dc3Sbluhm extern int g_skip_count;
61bd8f1dc3Sbluhm /* Count of the number of times the XML declaration handler is invoked */
62bd8f1dc3Sbluhm extern int g_xdecl_count;
63bd8f1dc3Sbluhm 
64bd8f1dc3Sbluhm /* Start/End Element Handlers */
65bd8f1dc3Sbluhm 
66bd8f1dc3Sbluhm extern void XMLCALL start_element_event_handler(void *userData,
67bd8f1dc3Sbluhm                                                 const XML_Char *name,
68bd8f1dc3Sbluhm                                                 const XML_Char **atts);
69bd8f1dc3Sbluhm 
70bd8f1dc3Sbluhm extern void XMLCALL end_element_event_handler(void *userData,
71bd8f1dc3Sbluhm                                               const XML_Char *name);
72bd8f1dc3Sbluhm 
73bd8f1dc3Sbluhm #  define STRUCT_START_TAG 0
74bd8f1dc3Sbluhm #  define STRUCT_END_TAG 1
75bd8f1dc3Sbluhm 
76bd8f1dc3Sbluhm extern void XMLCALL start_element_event_handler2(void *userData,
77bd8f1dc3Sbluhm                                                  const XML_Char *name,
78bd8f1dc3Sbluhm                                                  const XML_Char **attr);
79bd8f1dc3Sbluhm 
80bd8f1dc3Sbluhm extern void XMLCALL end_element_event_handler2(void *userData,
81bd8f1dc3Sbluhm                                                const XML_Char *name);
82bd8f1dc3Sbluhm 
83bd8f1dc3Sbluhm typedef struct attrInfo {
84bd8f1dc3Sbluhm   const XML_Char *name;
85bd8f1dc3Sbluhm   const XML_Char *value;
86bd8f1dc3Sbluhm } AttrInfo;
87bd8f1dc3Sbluhm 
88bd8f1dc3Sbluhm typedef struct elementInfo {
89bd8f1dc3Sbluhm   const XML_Char *name;
90bd8f1dc3Sbluhm   int attr_count;
91bd8f1dc3Sbluhm   const XML_Char *id_name;
92bd8f1dc3Sbluhm   AttrInfo *attributes;
93bd8f1dc3Sbluhm } ElementInfo;
94bd8f1dc3Sbluhm 
95*aa071e6eSbluhm typedef struct StructParserAndElementInfo {
96*aa071e6eSbluhm   XML_Parser parser;
97*aa071e6eSbluhm   ElementInfo *info;
98*aa071e6eSbluhm } ParserAndElementInfo;
99*aa071e6eSbluhm 
100bd8f1dc3Sbluhm extern void XMLCALL counting_start_element_handler(void *userData,
101bd8f1dc3Sbluhm                                                    const XML_Char *name,
102bd8f1dc3Sbluhm                                                    const XML_Char **atts);
103bd8f1dc3Sbluhm 
104bd8f1dc3Sbluhm extern void XMLCALL suspending_end_handler(void *userData, const XML_Char *s);
105bd8f1dc3Sbluhm 
106bd8f1dc3Sbluhm extern void XMLCALL start_element_suspender(void *userData,
107bd8f1dc3Sbluhm                                             const XML_Char *name,
108bd8f1dc3Sbluhm                                             const XML_Char **atts);
109bd8f1dc3Sbluhm 
110bd8f1dc3Sbluhm extern int g_triplet_start_flag;
111bd8f1dc3Sbluhm extern int g_triplet_end_flag;
112bd8f1dc3Sbluhm 
113bd8f1dc3Sbluhm extern void XMLCALL triplet_start_checker(void *userData, const XML_Char *name,
114bd8f1dc3Sbluhm                                           const XML_Char **atts);
115bd8f1dc3Sbluhm 
116bd8f1dc3Sbluhm extern void XMLCALL triplet_end_checker(void *userData, const XML_Char *name);
117bd8f1dc3Sbluhm 
118bd8f1dc3Sbluhm extern void XMLCALL overwrite_start_checker(void *userData,
119bd8f1dc3Sbluhm                                             const XML_Char *name,
120bd8f1dc3Sbluhm                                             const XML_Char **atts);
121bd8f1dc3Sbluhm 
122bd8f1dc3Sbluhm extern void XMLCALL overwrite_end_checker(void *userData, const XML_Char *name);
123bd8f1dc3Sbluhm 
124bd8f1dc3Sbluhm extern void XMLCALL start_element_fail(void *userData, const XML_Char *name,
125bd8f1dc3Sbluhm                                        const XML_Char **atts);
126bd8f1dc3Sbluhm 
127bd8f1dc3Sbluhm extern void XMLCALL start_ns_clearing_start_element(void *userData,
128bd8f1dc3Sbluhm                                                     const XML_Char *prefix,
129bd8f1dc3Sbluhm                                                     const XML_Char *uri);
130bd8f1dc3Sbluhm 
131bd8f1dc3Sbluhm typedef struct {
132bd8f1dc3Sbluhm   XML_Parser parser;
133bd8f1dc3Sbluhm   int deep;
134bd8f1dc3Sbluhm } DataIssue240;
135bd8f1dc3Sbluhm 
136bd8f1dc3Sbluhm extern void XMLCALL start_element_issue_240(void *userData,
137bd8f1dc3Sbluhm                                             const XML_Char *name,
138bd8f1dc3Sbluhm                                             const XML_Char **atts);
139bd8f1dc3Sbluhm 
140bd8f1dc3Sbluhm extern void XMLCALL end_element_issue_240(void *userData, const XML_Char *name);
141bd8f1dc3Sbluhm 
142bd8f1dc3Sbluhm /* Text encoding handlers */
143bd8f1dc3Sbluhm 
144bd8f1dc3Sbluhm extern int XMLCALL UnknownEncodingHandler(void *data, const XML_Char *encoding,
145bd8f1dc3Sbluhm                                           XML_Encoding *info);
146bd8f1dc3Sbluhm 
147bd8f1dc3Sbluhm extern int XMLCALL UnrecognisedEncodingHandler(void *data,
148bd8f1dc3Sbluhm                                                const XML_Char *encoding,
149bd8f1dc3Sbluhm                                                XML_Encoding *info);
150bd8f1dc3Sbluhm 
151bd8f1dc3Sbluhm extern int XMLCALL unknown_released_encoding_handler(void *data,
152bd8f1dc3Sbluhm                                                      const XML_Char *encoding,
153bd8f1dc3Sbluhm                                                      XML_Encoding *info);
154bd8f1dc3Sbluhm 
155bd8f1dc3Sbluhm extern int XMLCALL MiscEncodingHandler(void *data, const XML_Char *encoding,
156bd8f1dc3Sbluhm                                        XML_Encoding *info);
157bd8f1dc3Sbluhm 
158bd8f1dc3Sbluhm extern int XMLCALL long_encoding_handler(void *userData,
159bd8f1dc3Sbluhm                                          const XML_Char *encoding,
160bd8f1dc3Sbluhm                                          XML_Encoding *info);
161bd8f1dc3Sbluhm 
162bd8f1dc3Sbluhm /* External Entity Handlers */
163bd8f1dc3Sbluhm 
164bd8f1dc3Sbluhm typedef struct ExtOption {
165bd8f1dc3Sbluhm   const XML_Char *system_id;
166bd8f1dc3Sbluhm   const char *parse_text;
167bd8f1dc3Sbluhm } ExtOption;
168bd8f1dc3Sbluhm 
169bd8f1dc3Sbluhm extern int XMLCALL external_entity_optioner(XML_Parser parser,
170bd8f1dc3Sbluhm                                             const XML_Char *context,
171bd8f1dc3Sbluhm                                             const XML_Char *base,
172bd8f1dc3Sbluhm                                             const XML_Char *systemId,
173bd8f1dc3Sbluhm                                             const XML_Char *publicId);
174bd8f1dc3Sbluhm 
175bd8f1dc3Sbluhm extern int XMLCALL external_entity_loader(XML_Parser parser,
176bd8f1dc3Sbluhm                                           const XML_Char *context,
177bd8f1dc3Sbluhm                                           const XML_Char *base,
178bd8f1dc3Sbluhm                                           const XML_Char *systemId,
179bd8f1dc3Sbluhm                                           const XML_Char *publicId);
180bd8f1dc3Sbluhm 
181bd8f1dc3Sbluhm typedef struct ext_faults {
182bd8f1dc3Sbluhm   const char *parse_text;
183bd8f1dc3Sbluhm   const char *fail_text;
184bd8f1dc3Sbluhm   const XML_Char *encoding;
185bd8f1dc3Sbluhm   enum XML_Error error;
186bd8f1dc3Sbluhm } ExtFaults;
187bd8f1dc3Sbluhm 
188bd8f1dc3Sbluhm extern int XMLCALL external_entity_faulter(XML_Parser parser,
189bd8f1dc3Sbluhm                                            const XML_Char *context,
190bd8f1dc3Sbluhm                                            const XML_Char *base,
191bd8f1dc3Sbluhm                                            const XML_Char *systemId,
192bd8f1dc3Sbluhm                                            const XML_Char *publicId);
193bd8f1dc3Sbluhm extern int XMLCALL external_entity_failer__if_not_xml_ge(
194bd8f1dc3Sbluhm     XML_Parser parser, const XML_Char *context, const XML_Char *base,
195bd8f1dc3Sbluhm     const XML_Char *systemId, const XML_Char *publicId);
196bd8f1dc3Sbluhm extern int XMLCALL external_entity_null_loader(XML_Parser parser,
197bd8f1dc3Sbluhm                                                const XML_Char *context,
198bd8f1dc3Sbluhm                                                const XML_Char *base,
199bd8f1dc3Sbluhm                                                const XML_Char *systemId,
200bd8f1dc3Sbluhm                                                const XML_Char *publicId);
201bd8f1dc3Sbluhm 
202bd8f1dc3Sbluhm extern int XMLCALL external_entity_resetter(XML_Parser parser,
203bd8f1dc3Sbluhm                                             const XML_Char *context,
204bd8f1dc3Sbluhm                                             const XML_Char *base,
205bd8f1dc3Sbluhm                                             const XML_Char *systemId,
206bd8f1dc3Sbluhm                                             const XML_Char *publicId);
207bd8f1dc3Sbluhm 
208bd8f1dc3Sbluhm extern int XMLCALL external_entity_suspender(XML_Parser parser,
209bd8f1dc3Sbluhm                                              const XML_Char *context,
210bd8f1dc3Sbluhm                                              const XML_Char *base,
211bd8f1dc3Sbluhm                                              const XML_Char *systemId,
212bd8f1dc3Sbluhm                                              const XML_Char *publicId);
213bd8f1dc3Sbluhm 
214bd8f1dc3Sbluhm extern int XMLCALL external_entity_suspend_xmldecl(XML_Parser parser,
215bd8f1dc3Sbluhm                                                    const XML_Char *context,
216bd8f1dc3Sbluhm                                                    const XML_Char *base,
217bd8f1dc3Sbluhm                                                    const XML_Char *systemId,
218bd8f1dc3Sbluhm                                                    const XML_Char *publicId);
219bd8f1dc3Sbluhm 
220bd8f1dc3Sbluhm extern int XMLCALL external_entity_suspending_faulter(XML_Parser parser,
221bd8f1dc3Sbluhm                                                       const XML_Char *context,
222bd8f1dc3Sbluhm                                                       const XML_Char *base,
223bd8f1dc3Sbluhm                                                       const XML_Char *systemId,
224bd8f1dc3Sbluhm                                                       const XML_Char *publicId);
225bd8f1dc3Sbluhm 
226bd8f1dc3Sbluhm extern int XMLCALL external_entity_cr_catcher(XML_Parser parser,
227bd8f1dc3Sbluhm                                               const XML_Char *context,
228bd8f1dc3Sbluhm                                               const XML_Char *base,
229bd8f1dc3Sbluhm                                               const XML_Char *systemId,
230bd8f1dc3Sbluhm                                               const XML_Char *publicId);
231bd8f1dc3Sbluhm 
232bd8f1dc3Sbluhm extern int XMLCALL external_entity_bad_cr_catcher(XML_Parser parser,
233bd8f1dc3Sbluhm                                                   const XML_Char *context,
234bd8f1dc3Sbluhm                                                   const XML_Char *base,
235bd8f1dc3Sbluhm                                                   const XML_Char *systemId,
236bd8f1dc3Sbluhm                                                   const XML_Char *publicId);
237bd8f1dc3Sbluhm 
238bd8f1dc3Sbluhm extern int XMLCALL external_entity_rsqb_catcher(XML_Parser parser,
239bd8f1dc3Sbluhm                                                 const XML_Char *context,
240bd8f1dc3Sbluhm                                                 const XML_Char *base,
241bd8f1dc3Sbluhm                                                 const XML_Char *systemId,
242bd8f1dc3Sbluhm                                                 const XML_Char *publicId);
243bd8f1dc3Sbluhm 
244bd8f1dc3Sbluhm extern int XMLCALL external_entity_good_cdata_ascii(XML_Parser parser,
245bd8f1dc3Sbluhm                                                     const XML_Char *context,
246bd8f1dc3Sbluhm                                                     const XML_Char *base,
247bd8f1dc3Sbluhm                                                     const XML_Char *systemId,
248bd8f1dc3Sbluhm                                                     const XML_Char *publicId);
249bd8f1dc3Sbluhm 
250bd8f1dc3Sbluhm /* Entity declaration handlers */
251bd8f1dc3Sbluhm 
252bd8f1dc3Sbluhm extern void XMLCALL entity_suspending_decl_handler(void *userData,
253bd8f1dc3Sbluhm                                                    const XML_Char *name,
254bd8f1dc3Sbluhm                                                    XML_Content *model);
255bd8f1dc3Sbluhm 
256bd8f1dc3Sbluhm extern void XMLCALL entity_suspending_xdecl_handler(void *userData,
257bd8f1dc3Sbluhm                                                     const XML_Char *version,
258bd8f1dc3Sbluhm                                                     const XML_Char *encoding,
259bd8f1dc3Sbluhm                                                     int standalone);
260bd8f1dc3Sbluhm 
261bd8f1dc3Sbluhm extern int XMLCALL external_entity_param_checker(XML_Parser parser,
262bd8f1dc3Sbluhm                                                  const XML_Char *context,
263bd8f1dc3Sbluhm                                                  const XML_Char *base,
264bd8f1dc3Sbluhm                                                  const XML_Char *systemId,
265bd8f1dc3Sbluhm                                                  const XML_Char *publicId);
266bd8f1dc3Sbluhm 
267bd8f1dc3Sbluhm extern int XMLCALL external_entity_ref_param_checker(XML_Parser parameter,
268bd8f1dc3Sbluhm                                                      const XML_Char *context,
269bd8f1dc3Sbluhm                                                      const XML_Char *base,
270bd8f1dc3Sbluhm                                                      const XML_Char *systemId,
271bd8f1dc3Sbluhm                                                      const XML_Char *publicId);
272bd8f1dc3Sbluhm 
273bd8f1dc3Sbluhm extern int XMLCALL external_entity_param(XML_Parser parser,
274bd8f1dc3Sbluhm                                          const XML_Char *context,
275bd8f1dc3Sbluhm                                          const XML_Char *base,
276bd8f1dc3Sbluhm                                          const XML_Char *systemId,
277bd8f1dc3Sbluhm                                          const XML_Char *publicId);
278bd8f1dc3Sbluhm 
279bd8f1dc3Sbluhm extern int XMLCALL external_entity_load_ignore(XML_Parser parser,
280bd8f1dc3Sbluhm                                                const XML_Char *context,
281bd8f1dc3Sbluhm                                                const XML_Char *base,
282bd8f1dc3Sbluhm                                                const XML_Char *systemId,
283bd8f1dc3Sbluhm                                                const XML_Char *publicId);
284bd8f1dc3Sbluhm 
285bd8f1dc3Sbluhm extern int XMLCALL external_entity_load_ignore_utf16(XML_Parser parser,
286bd8f1dc3Sbluhm                                                      const XML_Char *context,
287bd8f1dc3Sbluhm                                                      const XML_Char *base,
288bd8f1dc3Sbluhm                                                      const XML_Char *systemId,
289bd8f1dc3Sbluhm                                                      const XML_Char *publicId);
290bd8f1dc3Sbluhm 
291bd8f1dc3Sbluhm extern int XMLCALL external_entity_load_ignore_utf16_be(
292bd8f1dc3Sbluhm     XML_Parser parser, const XML_Char *context, const XML_Char *base,
293bd8f1dc3Sbluhm     const XML_Char *systemId, const XML_Char *publicId);
294bd8f1dc3Sbluhm 
295bd8f1dc3Sbluhm extern int XMLCALL external_entity_valuer(XML_Parser parser,
296bd8f1dc3Sbluhm                                           const XML_Char *context,
297bd8f1dc3Sbluhm                                           const XML_Char *base,
298bd8f1dc3Sbluhm                                           const XML_Char *systemId,
299bd8f1dc3Sbluhm                                           const XML_Char *publicId);
300bd8f1dc3Sbluhm 
301bd8f1dc3Sbluhm extern int XMLCALL external_entity_not_standalone(XML_Parser parser,
302bd8f1dc3Sbluhm                                                   const XML_Char *context,
303bd8f1dc3Sbluhm                                                   const XML_Char *base,
304bd8f1dc3Sbluhm                                                   const XML_Char *systemId,
305bd8f1dc3Sbluhm                                                   const XML_Char *publicId);
306bd8f1dc3Sbluhm 
307bd8f1dc3Sbluhm extern int XMLCALL external_entity_value_aborter(XML_Parser parser,
308bd8f1dc3Sbluhm                                                  const XML_Char *context,
309bd8f1dc3Sbluhm                                                  const XML_Char *base,
310bd8f1dc3Sbluhm                                                  const XML_Char *systemId,
311bd8f1dc3Sbluhm                                                  const XML_Char *publicId);
312bd8f1dc3Sbluhm 
313bd8f1dc3Sbluhm extern int XMLCALL external_entity_public(XML_Parser parser,
314bd8f1dc3Sbluhm                                           const XML_Char *context,
315bd8f1dc3Sbluhm                                           const XML_Char *base,
316bd8f1dc3Sbluhm                                           const XML_Char *systemId,
317bd8f1dc3Sbluhm                                           const XML_Char *publicId);
318bd8f1dc3Sbluhm 
319bd8f1dc3Sbluhm extern int XMLCALL external_entity_devaluer(XML_Parser parser,
320bd8f1dc3Sbluhm                                             const XML_Char *context,
321bd8f1dc3Sbluhm                                             const XML_Char *base,
322bd8f1dc3Sbluhm                                             const XML_Char *systemId,
323bd8f1dc3Sbluhm                                             const XML_Char *publicId);
324bd8f1dc3Sbluhm 
325bd8f1dc3Sbluhm typedef struct ext_hdlr_data {
326bd8f1dc3Sbluhm   const char *parse_text;
327bd8f1dc3Sbluhm   XML_ExternalEntityRefHandler handler;
328bd8f1dc3Sbluhm } ExtHdlrData;
329bd8f1dc3Sbluhm 
330bd8f1dc3Sbluhm extern int XMLCALL external_entity_oneshot_loader(XML_Parser parser,
331bd8f1dc3Sbluhm                                                   const XML_Char *context,
332bd8f1dc3Sbluhm                                                   const XML_Char *base,
333bd8f1dc3Sbluhm                                                   const XML_Char *systemId,
334bd8f1dc3Sbluhm                                                   const XML_Char *publicId);
335bd8f1dc3Sbluhm 
336bd8f1dc3Sbluhm typedef struct ExtTest2 {
337bd8f1dc3Sbluhm   const char *parse_text;
338bd8f1dc3Sbluhm   int parse_len;
339bd8f1dc3Sbluhm   const XML_Char *encoding;
340bd8f1dc3Sbluhm   CharData *storage;
341bd8f1dc3Sbluhm } ExtTest2;
342bd8f1dc3Sbluhm 
343bd8f1dc3Sbluhm extern int XMLCALL external_entity_loader2(XML_Parser parser,
344bd8f1dc3Sbluhm                                            const XML_Char *context,
345bd8f1dc3Sbluhm                                            const XML_Char *base,
346bd8f1dc3Sbluhm                                            const XML_Char *systemId,
347bd8f1dc3Sbluhm                                            const XML_Char *publicId);
348bd8f1dc3Sbluhm 
349bd8f1dc3Sbluhm typedef struct ExtFaults2 {
350bd8f1dc3Sbluhm   const char *parse_text;
351bd8f1dc3Sbluhm   int parse_len;
352bd8f1dc3Sbluhm   const char *fail_text;
353bd8f1dc3Sbluhm   const XML_Char *encoding;
354bd8f1dc3Sbluhm   enum XML_Error error;
355bd8f1dc3Sbluhm } ExtFaults2;
356bd8f1dc3Sbluhm 
357bd8f1dc3Sbluhm extern int XMLCALL external_entity_faulter2(XML_Parser parser,
358bd8f1dc3Sbluhm                                             const XML_Char *context,
359bd8f1dc3Sbluhm                                             const XML_Char *base,
360bd8f1dc3Sbluhm                                             const XML_Char *systemId,
361bd8f1dc3Sbluhm                                             const XML_Char *publicId);
362bd8f1dc3Sbluhm 
363bd8f1dc3Sbluhm extern int XMLCALL external_entity_unfinished_attlist(XML_Parser parser,
364bd8f1dc3Sbluhm                                                       const XML_Char *context,
365bd8f1dc3Sbluhm                                                       const XML_Char *base,
366bd8f1dc3Sbluhm                                                       const XML_Char *systemId,
367bd8f1dc3Sbluhm                                                       const XML_Char *publicId);
368bd8f1dc3Sbluhm 
369bd8f1dc3Sbluhm extern int XMLCALL external_entity_handler(XML_Parser parser,
370bd8f1dc3Sbluhm                                            const XML_Char *context,
371bd8f1dc3Sbluhm                                            const XML_Char *base,
372bd8f1dc3Sbluhm                                            const XML_Char *systemId,
373bd8f1dc3Sbluhm                                            const XML_Char *publicId);
374bd8f1dc3Sbluhm 
375bd8f1dc3Sbluhm extern int XMLCALL external_entity_duff_loader(XML_Parser parser,
376bd8f1dc3Sbluhm                                                const XML_Char *context,
377bd8f1dc3Sbluhm                                                const XML_Char *base,
378bd8f1dc3Sbluhm                                                const XML_Char *systemId,
379bd8f1dc3Sbluhm                                                const XML_Char *publicId);
380bd8f1dc3Sbluhm 
381bd8f1dc3Sbluhm extern int XMLCALL external_entity_dbl_handler(XML_Parser parser,
382bd8f1dc3Sbluhm                                                const XML_Char *context,
383bd8f1dc3Sbluhm                                                const XML_Char *base,
384bd8f1dc3Sbluhm                                                const XML_Char *systemId,
385bd8f1dc3Sbluhm                                                const XML_Char *publicId);
386bd8f1dc3Sbluhm 
387bd8f1dc3Sbluhm extern int XMLCALL external_entity_dbl_handler_2(XML_Parser parser,
388bd8f1dc3Sbluhm                                                  const XML_Char *context,
389bd8f1dc3Sbluhm                                                  const XML_Char *base,
390bd8f1dc3Sbluhm                                                  const XML_Char *systemId,
391bd8f1dc3Sbluhm                                                  const XML_Char *publicId);
392bd8f1dc3Sbluhm 
393bd8f1dc3Sbluhm extern int XMLCALL external_entity_alloc_set_encoding(XML_Parser parser,
394bd8f1dc3Sbluhm                                                       const XML_Char *context,
395bd8f1dc3Sbluhm                                                       const XML_Char *base,
396bd8f1dc3Sbluhm                                                       const XML_Char *systemId,
397bd8f1dc3Sbluhm                                                       const XML_Char *publicId);
398bd8f1dc3Sbluhm 
399bd8f1dc3Sbluhm extern int XMLCALL external_entity_reallocator(XML_Parser parser,
400bd8f1dc3Sbluhm                                                const XML_Char *context,
401bd8f1dc3Sbluhm                                                const XML_Char *base,
402bd8f1dc3Sbluhm                                                const XML_Char *systemId,
403bd8f1dc3Sbluhm                                                const XML_Char *publicId);
404bd8f1dc3Sbluhm 
405bd8f1dc3Sbluhm extern int XMLCALL external_entity_alloc(XML_Parser parser,
406bd8f1dc3Sbluhm                                          const XML_Char *context,
407bd8f1dc3Sbluhm                                          const XML_Char *base,
408bd8f1dc3Sbluhm                                          const XML_Char *systemId,
409bd8f1dc3Sbluhm                                          const XML_Char *publicId);
410bd8f1dc3Sbluhm 
411bd8f1dc3Sbluhm extern int XMLCALL external_entity_parser_create_alloc_fail_handler(
412bd8f1dc3Sbluhm     XML_Parser parser, const XML_Char *context, const XML_Char *base,
413bd8f1dc3Sbluhm     const XML_Char *systemId, const XML_Char *publicId);
414bd8f1dc3Sbluhm 
415bd8f1dc3Sbluhm struct AccountingTestCase {
416bd8f1dc3Sbluhm   const char *primaryText;
417bd8f1dc3Sbluhm   const char *firstExternalText;  /* often NULL */
418bd8f1dc3Sbluhm   const char *secondExternalText; /* often NULL */
419bd8f1dc3Sbluhm   const unsigned long long expectedCountBytesIndirectExtra;
420bd8f1dc3Sbluhm };
421bd8f1dc3Sbluhm 
422bd8f1dc3Sbluhm extern int accounting_external_entity_ref_handler(XML_Parser parser,
423bd8f1dc3Sbluhm                                                   const XML_Char *context,
424bd8f1dc3Sbluhm                                                   const XML_Char *base,
425bd8f1dc3Sbluhm                                                   const XML_Char *systemId,
426bd8f1dc3Sbluhm                                                   const XML_Char *publicId);
427bd8f1dc3Sbluhm 
428bd8f1dc3Sbluhm /* NotStandalone handlers */
429bd8f1dc3Sbluhm 
430bd8f1dc3Sbluhm extern int XMLCALL reject_not_standalone_handler(void *userData);
431bd8f1dc3Sbluhm 
432bd8f1dc3Sbluhm extern int XMLCALL accept_not_standalone_handler(void *userData);
433bd8f1dc3Sbluhm 
434bd8f1dc3Sbluhm /* Attribute List handlers */
435bd8f1dc3Sbluhm 
436bd8f1dc3Sbluhm typedef struct AttTest {
437bd8f1dc3Sbluhm   const char *definition;
438bd8f1dc3Sbluhm   const XML_Char *element_name;
439bd8f1dc3Sbluhm   const XML_Char *attr_name;
440bd8f1dc3Sbluhm   const XML_Char *attr_type;
441bd8f1dc3Sbluhm   const XML_Char *default_value;
442bd8f1dc3Sbluhm   int is_required;
443bd8f1dc3Sbluhm } AttTest;
444bd8f1dc3Sbluhm 
445bd8f1dc3Sbluhm extern void XMLCALL verify_attlist_decl_handler(
446bd8f1dc3Sbluhm     void *userData, const XML_Char *element_name, const XML_Char *attr_name,
447bd8f1dc3Sbluhm     const XML_Char *attr_type, const XML_Char *default_value, int is_required);
448bd8f1dc3Sbluhm 
449bd8f1dc3Sbluhm /* Character data handlers */
450bd8f1dc3Sbluhm 
451bd8f1dc3Sbluhm extern void XMLCALL clearing_aborting_character_handler(void *userData,
452bd8f1dc3Sbluhm                                                         const XML_Char *s,
453bd8f1dc3Sbluhm                                                         int len);
454bd8f1dc3Sbluhm 
455bd8f1dc3Sbluhm extern void XMLCALL parser_stop_character_handler(void *userData,
456bd8f1dc3Sbluhm                                                   const XML_Char *s, int len);
457bd8f1dc3Sbluhm 
458bd8f1dc3Sbluhm extern void XMLCALL cr_cdata_handler(void *userData, const XML_Char *s,
459bd8f1dc3Sbluhm                                      int len);
460bd8f1dc3Sbluhm 
461bd8f1dc3Sbluhm extern void XMLCALL rsqb_handler(void *userData, const XML_Char *s, int len);
462bd8f1dc3Sbluhm 
463bd8f1dc3Sbluhm typedef struct ByteTestData {
464bd8f1dc3Sbluhm   int start_element_len;
465bd8f1dc3Sbluhm   int cdata_len;
466bd8f1dc3Sbluhm   int total_string_len;
467bd8f1dc3Sbluhm } ByteTestData;
468bd8f1dc3Sbluhm 
469bd8f1dc3Sbluhm extern void XMLCALL byte_character_handler(void *userData, const XML_Char *s,
470bd8f1dc3Sbluhm                                            int len);
471bd8f1dc3Sbluhm 
472bd8f1dc3Sbluhm extern void XMLCALL ext2_accumulate_characters(void *userData,
473bd8f1dc3Sbluhm                                                const XML_Char *s, int len);
474bd8f1dc3Sbluhm 
475bd8f1dc3Sbluhm /* Handlers that record their `len` arg and a single identifying character */
476bd8f1dc3Sbluhm 
477bd8f1dc3Sbluhm struct handler_record_entry {
478bd8f1dc3Sbluhm   const char *name;
479bd8f1dc3Sbluhm   int arg;
480bd8f1dc3Sbluhm };
481bd8f1dc3Sbluhm struct handler_record_list {
482bd8f1dc3Sbluhm   int count;
483bd8f1dc3Sbluhm   struct handler_record_entry entries[50]; // arbitrary big-enough max count
484bd8f1dc3Sbluhm };
485bd8f1dc3Sbluhm 
486bd8f1dc3Sbluhm extern void XMLCALL record_default_handler(void *userData, const XML_Char *s,
487bd8f1dc3Sbluhm                                            int len);
488bd8f1dc3Sbluhm 
489bd8f1dc3Sbluhm extern void XMLCALL record_cdata_handler(void *userData, const XML_Char *s,
490bd8f1dc3Sbluhm                                          int len);
491bd8f1dc3Sbluhm 
492bd8f1dc3Sbluhm extern void XMLCALL record_cdata_nodefault_handler(void *userData,
493bd8f1dc3Sbluhm                                                    const XML_Char *s, int len);
494bd8f1dc3Sbluhm 
495bd8f1dc3Sbluhm extern void XMLCALL record_skip_handler(void *userData,
496bd8f1dc3Sbluhm                                         const XML_Char *entityName,
497bd8f1dc3Sbluhm                                         int is_parameter_entity);
498bd8f1dc3Sbluhm 
499bd8f1dc3Sbluhm extern void XMLCALL record_element_start_handler(void *userData,
500bd8f1dc3Sbluhm                                                  const XML_Char *name,
501bd8f1dc3Sbluhm                                                  const XML_Char **atts);
502bd8f1dc3Sbluhm 
503bd8f1dc3Sbluhm extern void XMLCALL record_element_end_handler(void *userData,
504bd8f1dc3Sbluhm                                                const XML_Char *name);
505bd8f1dc3Sbluhm 
506bd8f1dc3Sbluhm extern const struct handler_record_entry *
507bd8f1dc3Sbluhm _handler_record_get(const struct handler_record_list *storage, int index,
508bd8f1dc3Sbluhm                     const char *file, int line);
509bd8f1dc3Sbluhm 
510bd8f1dc3Sbluhm #  define handler_record_get(storage, index)                                   \
511bd8f1dc3Sbluhm     _handler_record_get((storage), (index), __FILE__, __LINE__)
512bd8f1dc3Sbluhm 
513bd8f1dc3Sbluhm #  define assert_record_handler_called(storage, index, expected_name,          \
514bd8f1dc3Sbluhm                                        expected_arg)                           \
515bd8f1dc3Sbluhm     do {                                                                       \
516bd8f1dc3Sbluhm       const struct handler_record_entry *e                                     \
517bd8f1dc3Sbluhm           = handler_record_get(storage, index);                                \
518bd8f1dc3Sbluhm       assert_true(strcmp(e->name, expected_name) == 0);                        \
519bd8f1dc3Sbluhm       assert_true(e->arg == (expected_arg));                                   \
520bd8f1dc3Sbluhm     } while (0)
521bd8f1dc3Sbluhm 
522bd8f1dc3Sbluhm /* Entity Declaration Handlers */
523bd8f1dc3Sbluhm #  define ENTITY_MATCH_FAIL (-1)
524bd8f1dc3Sbluhm #  define ENTITY_MATCH_NOT_FOUND (0)
525bd8f1dc3Sbluhm #  define ENTITY_MATCH_SUCCESS (1)
526bd8f1dc3Sbluhm 
527bd8f1dc3Sbluhm extern void XMLCALL param_entity_match_handler(
528bd8f1dc3Sbluhm     void *userData, const XML_Char *entityName, int is_parameter_entity,
529bd8f1dc3Sbluhm     const XML_Char *value, int value_length, const XML_Char *base,
530bd8f1dc3Sbluhm     const XML_Char *systemId, const XML_Char *publicId,
531bd8f1dc3Sbluhm     const XML_Char *notationName);
532bd8f1dc3Sbluhm 
533bd8f1dc3Sbluhm extern void param_entity_match_init(const XML_Char *name,
534bd8f1dc3Sbluhm                                     const XML_Char *value);
535bd8f1dc3Sbluhm 
536bd8f1dc3Sbluhm extern int get_param_entity_match_flag(void);
537bd8f1dc3Sbluhm 
538bd8f1dc3Sbluhm /* Misc handlers */
539bd8f1dc3Sbluhm 
540bd8f1dc3Sbluhm extern void XMLCALL xml_decl_handler(void *userData, const XML_Char *version,
541bd8f1dc3Sbluhm                                      const XML_Char *encoding, int standalone);
542bd8f1dc3Sbluhm 
543bd8f1dc3Sbluhm extern void XMLCALL param_check_skip_handler(void *userData,
544bd8f1dc3Sbluhm                                              const XML_Char *entityName,
545bd8f1dc3Sbluhm                                              int is_parameter_entity);
546bd8f1dc3Sbluhm 
547bd8f1dc3Sbluhm extern void XMLCALL data_check_comment_handler(void *userData,
548bd8f1dc3Sbluhm                                                const XML_Char *data);
549bd8f1dc3Sbluhm 
550bd8f1dc3Sbluhm extern void XMLCALL selective_aborting_default_handler(void *userData,
551bd8f1dc3Sbluhm                                                        const XML_Char *s,
552bd8f1dc3Sbluhm                                                        int len);
553bd8f1dc3Sbluhm 
554bd8f1dc3Sbluhm extern void XMLCALL suspending_comment_handler(void *userData,
555bd8f1dc3Sbluhm                                                const XML_Char *data);
556bd8f1dc3Sbluhm 
557bd8f1dc3Sbluhm extern void XMLCALL element_decl_suspender(void *userData, const XML_Char *name,
558bd8f1dc3Sbluhm                                            XML_Content *model);
559bd8f1dc3Sbluhm 
560bd8f1dc3Sbluhm extern void XMLCALL accumulate_pi_characters(void *userData,
561bd8f1dc3Sbluhm                                              const XML_Char *target,
562bd8f1dc3Sbluhm                                              const XML_Char *data);
563bd8f1dc3Sbluhm 
564bd8f1dc3Sbluhm extern void XMLCALL accumulate_comment(void *userData, const XML_Char *data);
565bd8f1dc3Sbluhm 
566bd8f1dc3Sbluhm extern void XMLCALL accumulate_entity_decl(
567bd8f1dc3Sbluhm     void *userData, const XML_Char *entityName, int is_parameter_entity,
568bd8f1dc3Sbluhm     const XML_Char *value, int value_length, const XML_Char *base,
569bd8f1dc3Sbluhm     const XML_Char *systemId, const XML_Char *publicId,
570bd8f1dc3Sbluhm     const XML_Char *notationName);
571bd8f1dc3Sbluhm 
572bd8f1dc3Sbluhm extern void XMLCALL accumulate_start_element(void *userData,
573bd8f1dc3Sbluhm                                              const XML_Char *name,
574bd8f1dc3Sbluhm                                              const XML_Char **atts);
575bd8f1dc3Sbluhm 
576*aa071e6eSbluhm extern void XMLCALL accumulate_characters(void *userData, const XML_Char *s,
577*aa071e6eSbluhm                                           int len);
578*aa071e6eSbluhm 
579*aa071e6eSbluhm extern void XMLCALL accumulate_attribute(void *userData, const XML_Char *name,
580*aa071e6eSbluhm                                          const XML_Char **atts);
581*aa071e6eSbluhm 
582*aa071e6eSbluhm extern void XMLCALL ext_accumulate_characters(void *userData, const XML_Char *s,
583*aa071e6eSbluhm                                               int len);
584*aa071e6eSbluhm 
585bd8f1dc3Sbluhm typedef struct default_check {
586bd8f1dc3Sbluhm   const XML_Char *expected;
587bd8f1dc3Sbluhm   const int expectedLen;
588bd8f1dc3Sbluhm   XML_Bool seen;
589bd8f1dc3Sbluhm } DefaultCheck;
590bd8f1dc3Sbluhm 
591bd8f1dc3Sbluhm void XMLCALL checking_default_handler(void *userData, const XML_Char *s,
592bd8f1dc3Sbluhm                                       int len);
593bd8f1dc3Sbluhm 
594bd8f1dc3Sbluhm typedef struct {
595bd8f1dc3Sbluhm   XML_Parser parser;
596bd8f1dc3Sbluhm   CharData *storage;
597bd8f1dc3Sbluhm } ParserPlusStorage;
598bd8f1dc3Sbluhm 
599bd8f1dc3Sbluhm extern void XMLCALL
600bd8f1dc3Sbluhm accumulate_and_suspend_comment_handler(void *userData, const XML_Char *data);
601bd8f1dc3Sbluhm 
602bd8f1dc3Sbluhm #endif /* XML_HANDLERS_H */
603bd8f1dc3Sbluhm 
604bd8f1dc3Sbluhm #ifdef __cplusplus
605bd8f1dc3Sbluhm }
606bd8f1dc3Sbluhm #endif
607