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