Home | History | Annotate | Line # | Download | only in tests
      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 (at) users.sourceforge.net>
     10    Copyright (c) 2003      Greg Stein <gstein (at) users.sourceforge.net>
     11    Copyright (c) 2005-2007 Steven Solie <steven (at) solie.ca>
     12    Copyright (c) 2005-2012 Karl Waclawek <karl (at) waclawek.net>
     13    Copyright (c) 2016-2022 Sebastian Pipping <sebastian (at) pipping.org>
     14    Copyright (c) 2017-2022 Rhodri James <rhodri (at) wildebeest.org.uk>
     15    Copyright (c) 2017      Joe Orton <jorton (at) redhat.com>
     16    Copyright (c) 2017      Jos Gutirrez de la Concha <jose (at) zeroc.com>
     17    Copyright (c) 2018      Marco Maggi <marco.maggi-ipsu (at) poste.it>
     18    Copyright (c) 2019      David Loffredo <loffredo (at) steptools.com>
     19    Copyright (c) 2020      Tim Gates <tim.gates (at) iress.com>
     20    Copyright (c) 2021      Donghee Na <donghee.na (at) 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 
     43 #include "expat.h"
     44 #include "internal.h"
     45 #include "common.h"
     46 #include "dummy.h"
     47 
     48 /* Dummy handlers for when we need to set a handler to tickle a bug,
     49    but it doesn't need to do anything.
     50 */
     51 static unsigned long dummy_handler_flags = 0;
     52 
     53 void
     54 init_dummy_handlers(void) {
     55   dummy_handler_flags = 0;
     56 }
     57 
     58 unsigned long
     59 get_dummy_handler_flags(void) {
     60   return dummy_handler_flags;
     61 }
     62 
     63 void XMLCALL
     64 dummy_xdecl_handler(void *userData, const XML_Char *version,
     65                     const XML_Char *encoding, int standalone) {
     66   UNUSED_P(userData);
     67   UNUSED_P(version);
     68   UNUSED_P(encoding);
     69   UNUSED_P(standalone);
     70 }
     71 
     72 void XMLCALL
     73 dummy_start_doctype_handler(void *userData, const XML_Char *doctypeName,
     74                             const XML_Char *sysid, const XML_Char *pubid,
     75                             int has_internal_subset) {
     76   UNUSED_P(userData);
     77   UNUSED_P(doctypeName);
     78   UNUSED_P(sysid);
     79   UNUSED_P(pubid);
     80   UNUSED_P(has_internal_subset);
     81   dummy_handler_flags |= DUMMY_START_DOCTYPE_HANDLER_FLAG;
     82 }
     83 
     84 void XMLCALL
     85 dummy_end_doctype_handler(void *userData) {
     86   UNUSED_P(userData);
     87   dummy_handler_flags |= DUMMY_END_DOCTYPE_HANDLER_FLAG;
     88 }
     89 
     90 void XMLCALL
     91 dummy_entity_decl_handler(void *userData, const XML_Char *entityName,
     92                           int is_parameter_entity, const XML_Char *value,
     93                           int value_length, const XML_Char *base,
     94                           const XML_Char *systemId, const XML_Char *publicId,
     95                           const XML_Char *notationName) {
     96   UNUSED_P(userData);
     97   UNUSED_P(entityName);
     98   UNUSED_P(is_parameter_entity);
     99   UNUSED_P(value);
    100   UNUSED_P(value_length);
    101   UNUSED_P(base);
    102   UNUSED_P(systemId);
    103   UNUSED_P(publicId);
    104   UNUSED_P(notationName);
    105   dummy_handler_flags |= DUMMY_ENTITY_DECL_HANDLER_FLAG;
    106 }
    107 
    108 void XMLCALL
    109 dummy_notation_decl_handler(void *userData, const XML_Char *notationName,
    110                             const XML_Char *base, const XML_Char *systemId,
    111                             const XML_Char *publicId) {
    112   UNUSED_P(userData);
    113   UNUSED_P(notationName);
    114   UNUSED_P(base);
    115   UNUSED_P(systemId);
    116   UNUSED_P(publicId);
    117   dummy_handler_flags |= DUMMY_NOTATION_DECL_HANDLER_FLAG;
    118 }
    119 
    120 void XMLCALL
    121 dummy_element_decl_handler(void *userData, const XML_Char *name,
    122                            XML_Content *model) {
    123   UNUSED_P(userData);
    124   UNUSED_P(name);
    125   /* The content model must be freed by the handler.  Unfortunately
    126    * we cannot pass the parser as the userData because this is used
    127    * with other handlers that require other userData.
    128    */
    129   XML_FreeContentModel(g_parser, model);
    130   dummy_handler_flags |= DUMMY_ELEMENT_DECL_HANDLER_FLAG;
    131 }
    132 
    133 void XMLCALL
    134 dummy_attlist_decl_handler(void *userData, const XML_Char *elname,
    135                            const XML_Char *attname, const XML_Char *att_type,
    136                            const XML_Char *dflt, int isrequired) {
    137   UNUSED_P(userData);
    138   UNUSED_P(elname);
    139   UNUSED_P(attname);
    140   UNUSED_P(att_type);
    141   UNUSED_P(dflt);
    142   UNUSED_P(isrequired);
    143   dummy_handler_flags |= DUMMY_ATTLIST_DECL_HANDLER_FLAG;
    144 }
    145 
    146 void XMLCALL
    147 dummy_comment_handler(void *userData, const XML_Char *data) {
    148   UNUSED_P(userData);
    149   UNUSED_P(data);
    150   dummy_handler_flags |= DUMMY_COMMENT_HANDLER_FLAG;
    151 }
    152 
    153 void XMLCALL
    154 dummy_pi_handler(void *userData, const XML_Char *target, const XML_Char *data) {
    155   UNUSED_P(userData);
    156   UNUSED_P(target);
    157   UNUSED_P(data);
    158   dummy_handler_flags |= DUMMY_PI_HANDLER_FLAG;
    159 }
    160 
    161 void XMLCALL
    162 dummy_start_element(void *userData, const XML_Char *name,
    163                     const XML_Char **atts) {
    164   UNUSED_P(userData);
    165   UNUSED_P(name);
    166   UNUSED_P(atts);
    167   dummy_handler_flags |= DUMMY_START_ELEMENT_HANDLER_FLAG;
    168 }
    169 
    170 void XMLCALL
    171 dummy_end_element(void *userData, const XML_Char *name) {
    172   UNUSED_P(userData);
    173   UNUSED_P(name);
    174 }
    175 
    176 void XMLCALL
    177 dummy_start_cdata_handler(void *userData) {
    178   UNUSED_P(userData);
    179   dummy_handler_flags |= DUMMY_START_CDATA_HANDLER_FLAG;
    180 }
    181 
    182 void XMLCALL
    183 dummy_end_cdata_handler(void *userData) {
    184   UNUSED_P(userData);
    185   dummy_handler_flags |= DUMMY_END_CDATA_HANDLER_FLAG;
    186 }
    187 
    188 void XMLCALL
    189 dummy_cdata_handler(void *userData, const XML_Char *s, int len) {
    190   UNUSED_P(userData);
    191   UNUSED_P(s);
    192   UNUSED_P(len);
    193 }
    194 
    195 void XMLCALL
    196 dummy_start_namespace_decl_handler(void *userData, const XML_Char *prefix,
    197                                    const XML_Char *uri) {
    198   UNUSED_P(userData);
    199   UNUSED_P(prefix);
    200   UNUSED_P(uri);
    201   dummy_handler_flags |= DUMMY_START_NS_DECL_HANDLER_FLAG;
    202 }
    203 
    204 void XMLCALL
    205 dummy_end_namespace_decl_handler(void *userData, const XML_Char *prefix) {
    206   UNUSED_P(userData);
    207   UNUSED_P(prefix);
    208   dummy_handler_flags |= DUMMY_END_NS_DECL_HANDLER_FLAG;
    209 }
    210 
    211 /* This handler is obsolete, but while the code exists we should
    212  * ensure that dealing with the handler is covered by tests.
    213  */
    214 void XMLCALL
    215 dummy_unparsed_entity_decl_handler(void *userData, const XML_Char *entityName,
    216                                    const XML_Char *base,
    217                                    const XML_Char *systemId,
    218                                    const XML_Char *publicId,
    219                                    const XML_Char *notationName) {
    220   UNUSED_P(userData);
    221   UNUSED_P(entityName);
    222   UNUSED_P(base);
    223   UNUSED_P(systemId);
    224   UNUSED_P(publicId);
    225   UNUSED_P(notationName);
    226   dummy_handler_flags |= DUMMY_UNPARSED_ENTITY_DECL_HANDLER_FLAG;
    227 }
    228 
    229 void XMLCALL
    230 dummy_default_handler(void *userData, const XML_Char *s, int len) {
    231   UNUSED_P(userData);
    232   UNUSED_P(s);
    233   UNUSED_P(len);
    234 }
    235 
    236 void XMLCALL
    237 dummy_start_doctype_decl_handler(void *userData, const XML_Char *doctypeName,
    238                                  const XML_Char *sysid, const XML_Char *pubid,
    239                                  int has_internal_subset) {
    240   UNUSED_P(userData);
    241   UNUSED_P(doctypeName);
    242   UNUSED_P(sysid);
    243   UNUSED_P(pubid);
    244   UNUSED_P(has_internal_subset);
    245   dummy_handler_flags |= DUMMY_START_DOCTYPE_DECL_HANDLER_FLAG;
    246 }
    247 
    248 void XMLCALL
    249 dummy_end_doctype_decl_handler(void *userData) {
    250   UNUSED_P(userData);
    251   dummy_handler_flags |= DUMMY_END_DOCTYPE_DECL_HANDLER_FLAG;
    252 }
    253 
    254 void XMLCALL
    255 dummy_skip_handler(void *userData, const XML_Char *entityName,
    256                    int is_parameter_entity) {
    257   UNUSED_P(userData);
    258   UNUSED_P(entityName);
    259   UNUSED_P(is_parameter_entity);
    260   dummy_handler_flags |= DUMMY_SKIP_HANDLER_FLAG;
    261 }
    262