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