xref: /freebsd/contrib/expat/tests/dummy.c (revision 207d96dabfec14d7b3699747abb539ab3c1118ab)
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