175584Sru/* Dummy handler functions for the Expat test suite
275584Sru                            __  __            _
375584Sru                         ___\ \/ /_ __   __ _| |_
475584Sru                        / _ \\  /| '_ \ / _` | __|
5104862Sru                       |  __//  \| |_) | (_| | |_
675584Sru                        \___/_/\_\ .__/ \__,_|\__|
775584Sru                                 |_| XML parser
875584Sru
975584Sru   Copyright (c) 2001-2006 Fred L. Drake, Jr. <fdrake@users.sourceforge.net>
1075584Sru   Copyright (c) 2003      Greg Stein <gstein@users.sourceforge.net>
1175584Sru   Copyright (c) 2005-2007 Steven Solie <steven@solie.ca>
1275584Sru   Copyright (c) 2005-2012 Karl Waclawek <karl@waclawek.net>
1375584Sru   Copyright (c) 2016-2022 Sebastian Pipping <sebastian@pipping.org>
1475584Sru   Copyright (c) 2017-2022 Rhodri James <rhodri@wildebeest.org.uk>
1575584Sru   Copyright (c) 2017      Joe Orton <jorton@redhat.com>
1675584Sru   Copyright (c) 2017      Jos�� Guti��rrez de la Concha <jose@zeroc.com>
1775584Sru   Copyright (c) 2018      Marco Maggi <marco.maggi-ipsu@poste.it>
1875584Sru   Copyright (c) 2019      David Loffredo <loffredo@steptools.com>
1975584Sru   Copyright (c) 2020      Tim Gates <tim.gates@iress.com>
2075584Sru   Copyright (c) 2021      Donghee Na <donghee.na@python.org>
2175584Sru   Licensed under the MIT license:
2275584Sru
2375584Sru   Permission is  hereby granted,  free of charge,  to any  person obtaining
2475584Sru   a  copy  of  this  software   and  associated  documentation  files  (the
2575584Sru   "Software"),  to  deal in  the  Software  without restriction,  including
26104862Sru   without  limitation the  rights  to use,  copy,  modify, merge,  publish,
27104862Sru   distribute, sublicense, and/or sell copies of the Software, and to permit
28114402Sru   persons  to whom  the Software  is  furnished to  do so,  subject to  the
29104862Sru   following conditions:
30114402Sru
31104862Sru   The above copyright  notice and this permission notice  shall be included
32104862Sru   in all copies or substantial portions of the Software.
3375584Sru
3475584Sru   THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
3575584Sru   EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
3675584Sru   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
3775584Sru   NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
3875584Sru   DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
39104862Sru   OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
40114402Sru   USE OR OTHER DEALINGS IN THE SOFTWARE.
41114402Sru*/
42114402Sru
43114402Sru#include "expat.h"
44114402Sru#include "internal.h"
45114402Sru#include "common.h"
46114402Sru#include "dummy.h"
47114402Sru
48114402Sru/* Dummy handlers for when we need to set a handler to tickle a bug,
49104862Sru   but it doesn't need to do anything.
50104862Sru*/
51104862Srustatic unsigned long dummy_handler_flags = 0;
52114402Sru
53114402Sruvoid
54104862Sruinit_dummy_handlers(void) {
55114402Sru  dummy_handler_flags = 0;
56114402Sru}
57104862Sru
58104862Sruunsigned long
59104862Sruget_dummy_handler_flags(void) {
60104862Sru  return dummy_handler_flags;
61114402Sru}
62114402Sru
63114402Sruvoid XMLCALL
64114402Srudummy_xdecl_handler(void *userData, const XML_Char *version,
65114402Sru                    const XML_Char *encoding, int standalone) {
66114402Sru  UNUSED_P(userData);
67114402Sru  UNUSED_P(version);
68114402Sru  UNUSED_P(encoding);
69114402Sru  UNUSED_P(standalone);
70114402Sru}
71114402Sru
72114402Sruvoid XMLCALL
73114402Srudummy_start_doctype_handler(void *userData, const XML_Char *doctypeName,
74114402Sru                            const XML_Char *sysid, const XML_Char *pubid,
75114402Sru                            int has_internal_subset) {
76114402Sru  UNUSED_P(userData);
77114402Sru  UNUSED_P(doctypeName);
78114402Sru  UNUSED_P(sysid);
79114402Sru  UNUSED_P(pubid);
80114402Sru  UNUSED_P(has_internal_subset);
81114402Sru  dummy_handler_flags |= DUMMY_START_DOCTYPE_HANDLER_FLAG;
82114402Sru}
83151497Sru
84151497Sruvoid XMLCALL
85151497Srudummy_end_doctype_handler(void *userData) {
86151497Sru  UNUSED_P(userData);
87151497Sru  dummy_handler_flags |= DUMMY_END_DOCTYPE_HANDLER_FLAG;
88114402Sru}
89151497Sru
90151497Sruvoid XMLCALL
91151497Srudummy_entity_decl_handler(void *userData, const XML_Char *entityName,
92151497Sru                          int is_parameter_entity, const XML_Char *value,
93151497Sru                          int value_length, const XML_Char *base,
94114402Sru                          const XML_Char *systemId, const XML_Char *publicId,
95114402Sru                          const XML_Char *notationName) {
96114402Sru  UNUSED_P(userData);
97114402Sru  UNUSED_P(entityName);
98114402Sru  UNUSED_P(is_parameter_entity);
99114402Sru  UNUSED_P(value);
100114402Sru  UNUSED_P(value_length);
101114402Sru  UNUSED_P(base);
102114402Sru  UNUSED_P(systemId);
103114402Sru  UNUSED_P(publicId);
104114402Sru  UNUSED_P(notationName);
105114402Sru  dummy_handler_flags |= DUMMY_ENTITY_DECL_HANDLER_FLAG;
106114402Sru}
107114402Sru
108114402Sruvoid XMLCALL
109114402Srudummy_notation_decl_handler(void *userData, const XML_Char *notationName,
110114402Sru                            const XML_Char *base, const XML_Char *systemId,
111114402Sru                            const XML_Char *publicId) {
112114402Sru  UNUSED_P(userData);
113114402Sru  UNUSED_P(notationName);
114114402Sru  UNUSED_P(base);
115114402Sru  UNUSED_P(systemId);
116114402Sru  UNUSED_P(publicId);
117114402Sru  dummy_handler_flags |= DUMMY_NOTATION_DECL_HANDLER_FLAG;
118114402Sru}
119114402Sru
120114402Sruvoid XMLCALL
121114402Srudummy_element_decl_handler(void *userData, const XML_Char *name,
122114402Sru                           XML_Content *model) {
123114402Sru  UNUSED_P(userData);
124114402Sru  UNUSED_P(name);
125114402Sru  /* The content model must be freed by the handler.  Unfortunately
126114402Sru   * we cannot pass the parser as the userData because this is used
127114402Sru   * with other handlers that require other userData.
128114402Sru   */
129114402Sru  XML_FreeContentModel(g_parser, model);
13075584Sru  dummy_handler_flags |= DUMMY_ELEMENT_DECL_HANDLER_FLAG;
13175584Sru}
132104862Sru
133104862Sruvoid XMLCALL
134104862Srudummy_attlist_decl_handler(void *userData, const XML_Char *elname,
135104862Sru                           const XML_Char *attname, const XML_Char *att_type,
136104862Sru                           const XML_Char *dflt, int isrequired) {
137104862Sru  UNUSED_P(userData);
138104862Sru  UNUSED_P(elname);
139104862Sru  UNUSED_P(attname);
140104862Sru  UNUSED_P(att_type);
141104862Sru  UNUSED_P(dflt);
142104862Sru  UNUSED_P(isrequired);
143104862Sru  dummy_handler_flags |= DUMMY_ATTLIST_DECL_HANDLER_FLAG;
144104862Sru}
145104862Sru
146104862Sruvoid XMLCALL
147104862Srudummy_comment_handler(void *userData, const XML_Char *data) {
148104862Sru  UNUSED_P(userData);
149104862Sru  UNUSED_P(data);
150104862Sru  dummy_handler_flags |= DUMMY_COMMENT_HANDLER_FLAG;
151104862Sru}
152104862Sru
153104862Sruvoid XMLCALL
154104862Srudummy_pi_handler(void *userData, const XML_Char *target, const XML_Char *data) {
155104862Sru  UNUSED_P(userData);
156104862Sru  UNUSED_P(target);
157104862Sru  UNUSED_P(data);
158104862Sru  dummy_handler_flags |= DUMMY_PI_HANDLER_FLAG;
159104862Sru}
160104862Sru
161104862Sruvoid XMLCALL
162104862Srudummy_start_element(void *userData, const XML_Char *name,
163104862Sru                    const XML_Char **atts) {
164104862Sru  UNUSED_P(userData);
165104862Sru  UNUSED_P(name);
166104862Sru  UNUSED_P(atts);
167104862Sru  dummy_handler_flags |= DUMMY_START_ELEMENT_HANDLER_FLAG;
168104862Sru}
169104862Sru
170104862Sruvoid XMLCALL
171104862Srudummy_end_element(void *userData, const XML_Char *name) {
172104862Sru  UNUSED_P(userData);
173104862Sru  UNUSED_P(name);
174104862Sru}
175104862Sru
176104862Sruvoid XMLCALL
177104862Srudummy_start_cdata_handler(void *userData) {
178104862Sru  UNUSED_P(userData);
179104862Sru  dummy_handler_flags |= DUMMY_START_CDATA_HANDLER_FLAG;
180104862Sru}
181104862Sru
182104862Sruvoid XMLCALL
183104862Srudummy_end_cdata_handler(void *userData) {
184104862Sru  UNUSED_P(userData);
185104862Sru  dummy_handler_flags |= DUMMY_END_CDATA_HANDLER_FLAG;
186104862Sru}
187104862Sru
188104862Sruvoid XMLCALL
189104862Srudummy_cdata_handler(void *userData, const XML_Char *s, int len) {
190104862Sru  UNUSED_P(userData);
191104862Sru  UNUSED_P(s);
192104862Sru  UNUSED_P(len);
193104862Sru}
194104862Sru
195104862Sruvoid XMLCALL
196104862Srudummy_start_namespace_decl_handler(void *userData, const XML_Char *prefix,
197104862Sru                                   const XML_Char *uri) {
198104862Sru  UNUSED_P(userData);
199104862Sru  UNUSED_P(prefix);
200104862Sru  UNUSED_P(uri);
201104862Sru  dummy_handler_flags |= DUMMY_START_NS_DECL_HANDLER_FLAG;
202104862Sru}
203104862Sru
204104862Sruvoid XMLCALL
205104862Srudummy_end_namespace_decl_handler(void *userData, const XML_Char *prefix) {
206104862Sru  UNUSED_P(userData);
207104862Sru  UNUSED_P(prefix);
208104862Sru  dummy_handler_flags |= DUMMY_END_NS_DECL_HANDLER_FLAG;
209104862Sru}
210104862Sru
211104862Sru/* This handler is obsolete, but while the code exists we should
212104862Sru * ensure that dealing with the handler is covered by tests.
213104862Sru */
214104862Sruvoid XMLCALL
215104862Srudummy_unparsed_entity_decl_handler(void *userData, const XML_Char *entityName,
216104862Sru                                   const XML_Char *base,
217104862Sru                                   const XML_Char *systemId,
218104862Sru                                   const XML_Char *publicId,
219104862Sru                                   const XML_Char *notationName) {
220104862Sru  UNUSED_P(userData);
221104862Sru  UNUSED_P(entityName);
222104862Sru  UNUSED_P(base);
223104862Sru  UNUSED_P(systemId);
224104862Sru  UNUSED_P(publicId);
225104862Sru  UNUSED_P(notationName);
226104862Sru  dummy_handler_flags |= DUMMY_UNPARSED_ENTITY_DECL_HANDLER_FLAG;
227104862Sru}
228104862Sru
229104862Sruvoid XMLCALL
230104862Srudummy_default_handler(void *userData, const XML_Char *s, int len) {
231104862Sru  UNUSED_P(userData);
232104862Sru  UNUSED_P(s);
233104862Sru  UNUSED_P(len);
234104862Sru}
235104862Sru
236104862Sruvoid XMLCALL
237104862Srudummy_start_doctype_decl_handler(void *userData, const XML_Char *doctypeName,
238104862Sru                                 const XML_Char *sysid, const XML_Char *pubid,
239104862Sru                                 int has_internal_subset) {
240104862Sru  UNUSED_P(userData);
241104862Sru  UNUSED_P(doctypeName);
242104862Sru  UNUSED_P(sysid);
243104862Sru  UNUSED_P(pubid);
244104862Sru  UNUSED_P(has_internal_subset);
245104862Sru  dummy_handler_flags |= DUMMY_START_DOCTYPE_DECL_HANDLER_FLAG;
246104862Sru}
247104862Sru
248104862Sruvoid XMLCALL
249104862Srudummy_end_doctype_decl_handler(void *userData) {
250104862Sru  UNUSED_P(userData);
251104862Sru  dummy_handler_flags |= DUMMY_END_DOCTYPE_DECL_HANDLER_FLAG;
252104862Sru}
253104862Sru
254104862Sruvoid XMLCALL
255104862Srudummy_skip_handler(void *userData, const XML_Char *entityName,
256104862Sru                   int is_parameter_entity) {
257104862Sru  UNUSED_P(userData);
258104862Sru  UNUSED_P(entityName);
259104862Sru  UNUSED_P(is_parameter_entity);
260104862Sru  dummy_handler_flags |= DUMMY_SKIP_HANDLER_FLAG;
261104862Sru}
262104862Sru