1*bd8f1dc3Sbluhm /* Dummy handler functions for the Expat test suite
2*bd8f1dc3Sbluhm __ __ _
3*bd8f1dc3Sbluhm ___\ \/ /_ __ __ _| |_
4*bd8f1dc3Sbluhm / _ \\ /| '_ \ / _` | __|
5*bd8f1dc3Sbluhm | __// \| |_) | (_| | |_
6*bd8f1dc3Sbluhm \___/_/\_\ .__/ \__,_|\__|
7*bd8f1dc3Sbluhm |_| XML parser
8*bd8f1dc3Sbluhm
9*bd8f1dc3Sbluhm Copyright (c) 2001-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
10*bd8f1dc3Sbluhm Copyright (c) 2003 Greg Stein <gstein@users.sourceforge.net>
11*bd8f1dc3Sbluhm Copyright (c) 2005-2007 Steven Solie <steven@solie.ca>
12*bd8f1dc3Sbluhm Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net>
13*bd8f1dc3Sbluhm Copyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>
14*bd8f1dc3Sbluhm Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk>
15*bd8f1dc3Sbluhm Copyright (c) 2017 Joe Orton <jorton@redhat.com>
16*bd8f1dc3Sbluhm Copyright (c) 2017 José Gutiérrez de la Concha <jose@zeroc.com>
17*bd8f1dc3Sbluhm Copyright (c) 2018 Marco Maggi <marco.maggi-ipsu@poste.it>
18*bd8f1dc3Sbluhm Copyright (c) 2019 David Loffredo <loffredo@steptools.com>
19*bd8f1dc3Sbluhm Copyright (c) 2020 Tim Gates <tim.gates@iress.com>
20*bd8f1dc3Sbluhm Copyright (c) 2021 Donghee Na <donghee.na@python.org>
21*bd8f1dc3Sbluhm Licensed under the MIT license:
22*bd8f1dc3Sbluhm
23*bd8f1dc3Sbluhm Permission is hereby granted, free of charge, to any person obtaining
24*bd8f1dc3Sbluhm a copy of this software and associated documentation files (the
25*bd8f1dc3Sbluhm "Software"), to deal in the Software without restriction, including
26*bd8f1dc3Sbluhm without limitation the rights to use, copy, modify, merge, publish,
27*bd8f1dc3Sbluhm distribute, sublicense, and/or sell copies of the Software, and to permit
28*bd8f1dc3Sbluhm persons to whom the Software is furnished to do so, subject to the
29*bd8f1dc3Sbluhm following conditions:
30*bd8f1dc3Sbluhm
31*bd8f1dc3Sbluhm The above copyright notice and this permission notice shall be included
32*bd8f1dc3Sbluhm in all copies or substantial portions of the Software.
33*bd8f1dc3Sbluhm
34*bd8f1dc3Sbluhm THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
35*bd8f1dc3Sbluhm EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
36*bd8f1dc3Sbluhm MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
37*bd8f1dc3Sbluhm NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
38*bd8f1dc3Sbluhm DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
39*bd8f1dc3Sbluhm OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
40*bd8f1dc3Sbluhm USE OR OTHER DEALINGS IN THE SOFTWARE.
41*bd8f1dc3Sbluhm */
42*bd8f1dc3Sbluhm
43*bd8f1dc3Sbluhm #include "expat.h"
44*bd8f1dc3Sbluhm #include "internal.h"
45*bd8f1dc3Sbluhm #include "common.h"
46*bd8f1dc3Sbluhm #include "dummy.h"
47*bd8f1dc3Sbluhm
48*bd8f1dc3Sbluhm /* Dummy handlers for when we need to set a handler to tickle a bug,
49*bd8f1dc3Sbluhm but it doesn't need to do anything.
50*bd8f1dc3Sbluhm */
51*bd8f1dc3Sbluhm static unsigned long dummy_handler_flags = 0;
52*bd8f1dc3Sbluhm
53*bd8f1dc3Sbluhm void
init_dummy_handlers(void)54*bd8f1dc3Sbluhm init_dummy_handlers(void) {
55*bd8f1dc3Sbluhm dummy_handler_flags = 0;
56*bd8f1dc3Sbluhm }
57*bd8f1dc3Sbluhm
58*bd8f1dc3Sbluhm unsigned long
get_dummy_handler_flags(void)59*bd8f1dc3Sbluhm get_dummy_handler_flags(void) {
60*bd8f1dc3Sbluhm return dummy_handler_flags;
61*bd8f1dc3Sbluhm }
62*bd8f1dc3Sbluhm
63*bd8f1dc3Sbluhm void XMLCALL
dummy_xdecl_handler(void * userData,const XML_Char * version,const XML_Char * encoding,int standalone)64*bd8f1dc3Sbluhm dummy_xdecl_handler(void *userData, const XML_Char *version,
65*bd8f1dc3Sbluhm const XML_Char *encoding, int standalone) {
66*bd8f1dc3Sbluhm UNUSED_P(userData);
67*bd8f1dc3Sbluhm UNUSED_P(version);
68*bd8f1dc3Sbluhm UNUSED_P(encoding);
69*bd8f1dc3Sbluhm UNUSED_P(standalone);
70*bd8f1dc3Sbluhm }
71*bd8f1dc3Sbluhm
72*bd8f1dc3Sbluhm void XMLCALL
dummy_start_doctype_handler(void * userData,const XML_Char * doctypeName,const XML_Char * sysid,const XML_Char * pubid,int has_internal_subset)73*bd8f1dc3Sbluhm dummy_start_doctype_handler(void *userData, const XML_Char *doctypeName,
74*bd8f1dc3Sbluhm const XML_Char *sysid, const XML_Char *pubid,
75*bd8f1dc3Sbluhm int has_internal_subset) {
76*bd8f1dc3Sbluhm UNUSED_P(userData);
77*bd8f1dc3Sbluhm UNUSED_P(doctypeName);
78*bd8f1dc3Sbluhm UNUSED_P(sysid);
79*bd8f1dc3Sbluhm UNUSED_P(pubid);
80*bd8f1dc3Sbluhm UNUSED_P(has_internal_subset);
81*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_START_DOCTYPE_HANDLER_FLAG;
82*bd8f1dc3Sbluhm }
83*bd8f1dc3Sbluhm
84*bd8f1dc3Sbluhm void XMLCALL
dummy_end_doctype_handler(void * userData)85*bd8f1dc3Sbluhm dummy_end_doctype_handler(void *userData) {
86*bd8f1dc3Sbluhm UNUSED_P(userData);
87*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_END_DOCTYPE_HANDLER_FLAG;
88*bd8f1dc3Sbluhm }
89*bd8f1dc3Sbluhm
90*bd8f1dc3Sbluhm void XMLCALL
dummy_entity_decl_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)91*bd8f1dc3Sbluhm dummy_entity_decl_handler(void *userData, const XML_Char *entityName,
92*bd8f1dc3Sbluhm int is_parameter_entity, const XML_Char *value,
93*bd8f1dc3Sbluhm int value_length, const XML_Char *base,
94*bd8f1dc3Sbluhm const XML_Char *systemId, const XML_Char *publicId,
95*bd8f1dc3Sbluhm const XML_Char *notationName) {
96*bd8f1dc3Sbluhm UNUSED_P(userData);
97*bd8f1dc3Sbluhm UNUSED_P(entityName);
98*bd8f1dc3Sbluhm UNUSED_P(is_parameter_entity);
99*bd8f1dc3Sbluhm UNUSED_P(value);
100*bd8f1dc3Sbluhm UNUSED_P(value_length);
101*bd8f1dc3Sbluhm UNUSED_P(base);
102*bd8f1dc3Sbluhm UNUSED_P(systemId);
103*bd8f1dc3Sbluhm UNUSED_P(publicId);
104*bd8f1dc3Sbluhm UNUSED_P(notationName);
105*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_ENTITY_DECL_HANDLER_FLAG;
106*bd8f1dc3Sbluhm }
107*bd8f1dc3Sbluhm
108*bd8f1dc3Sbluhm void XMLCALL
dummy_notation_decl_handler(void * userData,const XML_Char * notationName,const XML_Char * base,const XML_Char * systemId,const XML_Char * publicId)109*bd8f1dc3Sbluhm dummy_notation_decl_handler(void *userData, const XML_Char *notationName,
110*bd8f1dc3Sbluhm const XML_Char *base, const XML_Char *systemId,
111*bd8f1dc3Sbluhm const XML_Char *publicId) {
112*bd8f1dc3Sbluhm UNUSED_P(userData);
113*bd8f1dc3Sbluhm UNUSED_P(notationName);
114*bd8f1dc3Sbluhm UNUSED_P(base);
115*bd8f1dc3Sbluhm UNUSED_P(systemId);
116*bd8f1dc3Sbluhm UNUSED_P(publicId);
117*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_NOTATION_DECL_HANDLER_FLAG;
118*bd8f1dc3Sbluhm }
119*bd8f1dc3Sbluhm
120*bd8f1dc3Sbluhm void XMLCALL
dummy_element_decl_handler(void * userData,const XML_Char * name,XML_Content * model)121*bd8f1dc3Sbluhm dummy_element_decl_handler(void *userData, const XML_Char *name,
122*bd8f1dc3Sbluhm XML_Content *model) {
123*bd8f1dc3Sbluhm UNUSED_P(userData);
124*bd8f1dc3Sbluhm UNUSED_P(name);
125*bd8f1dc3Sbluhm /* The content model must be freed by the handler. Unfortunately
126*bd8f1dc3Sbluhm * we cannot pass the parser as the userData because this is used
127*bd8f1dc3Sbluhm * with other handlers that require other userData.
128*bd8f1dc3Sbluhm */
129*bd8f1dc3Sbluhm XML_FreeContentModel(g_parser, model);
130*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_ELEMENT_DECL_HANDLER_FLAG;
131*bd8f1dc3Sbluhm }
132*bd8f1dc3Sbluhm
133*bd8f1dc3Sbluhm void XMLCALL
dummy_attlist_decl_handler(void * userData,const XML_Char * elname,const XML_Char * attname,const XML_Char * att_type,const XML_Char * dflt,int isrequired)134*bd8f1dc3Sbluhm dummy_attlist_decl_handler(void *userData, const XML_Char *elname,
135*bd8f1dc3Sbluhm const XML_Char *attname, const XML_Char *att_type,
136*bd8f1dc3Sbluhm const XML_Char *dflt, int isrequired) {
137*bd8f1dc3Sbluhm UNUSED_P(userData);
138*bd8f1dc3Sbluhm UNUSED_P(elname);
139*bd8f1dc3Sbluhm UNUSED_P(attname);
140*bd8f1dc3Sbluhm UNUSED_P(att_type);
141*bd8f1dc3Sbluhm UNUSED_P(dflt);
142*bd8f1dc3Sbluhm UNUSED_P(isrequired);
143*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_ATTLIST_DECL_HANDLER_FLAG;
144*bd8f1dc3Sbluhm }
145*bd8f1dc3Sbluhm
146*bd8f1dc3Sbluhm void XMLCALL
dummy_comment_handler(void * userData,const XML_Char * data)147*bd8f1dc3Sbluhm dummy_comment_handler(void *userData, const XML_Char *data) {
148*bd8f1dc3Sbluhm UNUSED_P(userData);
149*bd8f1dc3Sbluhm UNUSED_P(data);
150*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_COMMENT_HANDLER_FLAG;
151*bd8f1dc3Sbluhm }
152*bd8f1dc3Sbluhm
153*bd8f1dc3Sbluhm void XMLCALL
dummy_pi_handler(void * userData,const XML_Char * target,const XML_Char * data)154*bd8f1dc3Sbluhm dummy_pi_handler(void *userData, const XML_Char *target, const XML_Char *data) {
155*bd8f1dc3Sbluhm UNUSED_P(userData);
156*bd8f1dc3Sbluhm UNUSED_P(target);
157*bd8f1dc3Sbluhm UNUSED_P(data);
158*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_PI_HANDLER_FLAG;
159*bd8f1dc3Sbluhm }
160*bd8f1dc3Sbluhm
161*bd8f1dc3Sbluhm void XMLCALL
dummy_start_element(void * userData,const XML_Char * name,const XML_Char ** atts)162*bd8f1dc3Sbluhm dummy_start_element(void *userData, const XML_Char *name,
163*bd8f1dc3Sbluhm const XML_Char **atts) {
164*bd8f1dc3Sbluhm UNUSED_P(userData);
165*bd8f1dc3Sbluhm UNUSED_P(name);
166*bd8f1dc3Sbluhm UNUSED_P(atts);
167*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_START_ELEMENT_HANDLER_FLAG;
168*bd8f1dc3Sbluhm }
169*bd8f1dc3Sbluhm
170*bd8f1dc3Sbluhm void XMLCALL
dummy_end_element(void * userData,const XML_Char * name)171*bd8f1dc3Sbluhm dummy_end_element(void *userData, const XML_Char *name) {
172*bd8f1dc3Sbluhm UNUSED_P(userData);
173*bd8f1dc3Sbluhm UNUSED_P(name);
174*bd8f1dc3Sbluhm }
175*bd8f1dc3Sbluhm
176*bd8f1dc3Sbluhm void XMLCALL
dummy_start_cdata_handler(void * userData)177*bd8f1dc3Sbluhm dummy_start_cdata_handler(void *userData) {
178*bd8f1dc3Sbluhm UNUSED_P(userData);
179*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_START_CDATA_HANDLER_FLAG;
180*bd8f1dc3Sbluhm }
181*bd8f1dc3Sbluhm
182*bd8f1dc3Sbluhm void XMLCALL
dummy_end_cdata_handler(void * userData)183*bd8f1dc3Sbluhm dummy_end_cdata_handler(void *userData) {
184*bd8f1dc3Sbluhm UNUSED_P(userData);
185*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_END_CDATA_HANDLER_FLAG;
186*bd8f1dc3Sbluhm }
187*bd8f1dc3Sbluhm
188*bd8f1dc3Sbluhm void XMLCALL
dummy_cdata_handler(void * userData,const XML_Char * s,int len)189*bd8f1dc3Sbluhm dummy_cdata_handler(void *userData, const XML_Char *s, int len) {
190*bd8f1dc3Sbluhm UNUSED_P(userData);
191*bd8f1dc3Sbluhm UNUSED_P(s);
192*bd8f1dc3Sbluhm UNUSED_P(len);
193*bd8f1dc3Sbluhm }
194*bd8f1dc3Sbluhm
195*bd8f1dc3Sbluhm void XMLCALL
dummy_start_namespace_decl_handler(void * userData,const XML_Char * prefix,const XML_Char * uri)196*bd8f1dc3Sbluhm dummy_start_namespace_decl_handler(void *userData, const XML_Char *prefix,
197*bd8f1dc3Sbluhm const XML_Char *uri) {
198*bd8f1dc3Sbluhm UNUSED_P(userData);
199*bd8f1dc3Sbluhm UNUSED_P(prefix);
200*bd8f1dc3Sbluhm UNUSED_P(uri);
201*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_START_NS_DECL_HANDLER_FLAG;
202*bd8f1dc3Sbluhm }
203*bd8f1dc3Sbluhm
204*bd8f1dc3Sbluhm void XMLCALL
dummy_end_namespace_decl_handler(void * userData,const XML_Char * prefix)205*bd8f1dc3Sbluhm dummy_end_namespace_decl_handler(void *userData, const XML_Char *prefix) {
206*bd8f1dc3Sbluhm UNUSED_P(userData);
207*bd8f1dc3Sbluhm UNUSED_P(prefix);
208*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_END_NS_DECL_HANDLER_FLAG;
209*bd8f1dc3Sbluhm }
210*bd8f1dc3Sbluhm
211*bd8f1dc3Sbluhm /* This handler is obsolete, but while the code exists we should
212*bd8f1dc3Sbluhm * ensure that dealing with the handler is covered by tests.
213*bd8f1dc3Sbluhm */
214*bd8f1dc3Sbluhm void XMLCALL
dummy_unparsed_entity_decl_handler(void * userData,const XML_Char * entityName,const XML_Char * base,const XML_Char * systemId,const XML_Char * publicId,const XML_Char * notationName)215*bd8f1dc3Sbluhm dummy_unparsed_entity_decl_handler(void *userData, const XML_Char *entityName,
216*bd8f1dc3Sbluhm const XML_Char *base,
217*bd8f1dc3Sbluhm const XML_Char *systemId,
218*bd8f1dc3Sbluhm const XML_Char *publicId,
219*bd8f1dc3Sbluhm const XML_Char *notationName) {
220*bd8f1dc3Sbluhm UNUSED_P(userData);
221*bd8f1dc3Sbluhm UNUSED_P(entityName);
222*bd8f1dc3Sbluhm UNUSED_P(base);
223*bd8f1dc3Sbluhm UNUSED_P(systemId);
224*bd8f1dc3Sbluhm UNUSED_P(publicId);
225*bd8f1dc3Sbluhm UNUSED_P(notationName);
226*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_UNPARSED_ENTITY_DECL_HANDLER_FLAG;
227*bd8f1dc3Sbluhm }
228*bd8f1dc3Sbluhm
229*bd8f1dc3Sbluhm void XMLCALL
dummy_default_handler(void * userData,const XML_Char * s,int len)230*bd8f1dc3Sbluhm dummy_default_handler(void *userData, const XML_Char *s, int len) {
231*bd8f1dc3Sbluhm UNUSED_P(userData);
232*bd8f1dc3Sbluhm UNUSED_P(s);
233*bd8f1dc3Sbluhm UNUSED_P(len);
234*bd8f1dc3Sbluhm }
235*bd8f1dc3Sbluhm
236*bd8f1dc3Sbluhm void XMLCALL
dummy_start_doctype_decl_handler(void * userData,const XML_Char * doctypeName,const XML_Char * sysid,const XML_Char * pubid,int has_internal_subset)237*bd8f1dc3Sbluhm dummy_start_doctype_decl_handler(void *userData, const XML_Char *doctypeName,
238*bd8f1dc3Sbluhm const XML_Char *sysid, const XML_Char *pubid,
239*bd8f1dc3Sbluhm int has_internal_subset) {
240*bd8f1dc3Sbluhm UNUSED_P(userData);
241*bd8f1dc3Sbluhm UNUSED_P(doctypeName);
242*bd8f1dc3Sbluhm UNUSED_P(sysid);
243*bd8f1dc3Sbluhm UNUSED_P(pubid);
244*bd8f1dc3Sbluhm UNUSED_P(has_internal_subset);
245*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_START_DOCTYPE_DECL_HANDLER_FLAG;
246*bd8f1dc3Sbluhm }
247*bd8f1dc3Sbluhm
248*bd8f1dc3Sbluhm void XMLCALL
dummy_end_doctype_decl_handler(void * userData)249*bd8f1dc3Sbluhm dummy_end_doctype_decl_handler(void *userData) {
250*bd8f1dc3Sbluhm UNUSED_P(userData);
251*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_END_DOCTYPE_DECL_HANDLER_FLAG;
252*bd8f1dc3Sbluhm }
253*bd8f1dc3Sbluhm
254*bd8f1dc3Sbluhm void XMLCALL
dummy_skip_handler(void * userData,const XML_Char * entityName,int is_parameter_entity)255*bd8f1dc3Sbluhm dummy_skip_handler(void *userData, const XML_Char *entityName,
256*bd8f1dc3Sbluhm int is_parameter_entity) {
257*bd8f1dc3Sbluhm UNUSED_P(userData);
258*bd8f1dc3Sbluhm UNUSED_P(entityName);
259*bd8f1dc3Sbluhm UNUSED_P(is_parameter_entity);
260*bd8f1dc3Sbluhm dummy_handler_flags |= DUMMY_SKIP_HANDLER_FLAG;
261*bd8f1dc3Sbluhm }
262