github.com/munnerz/test-infra@v0.0.0-20190108210205-ce3d181dc989/gubernator/third_party/defusedxml/expatreader.py (about) 1 # defusedxml 2 # 3 # Copyright (c) 2013 by Christian Heimes <christian@python.org> 4 # Licensed to PSF under a Contributor Agreement. 5 # See http://www.python.org/psf/license for licensing details. 6 """Defused xml.sax.expatreader 7 """ 8 from __future__ import print_function, absolute_import 9 10 from xml.sax.expatreader import ExpatParser as _ExpatParser 11 12 from .common import (DTDForbidden, EntitiesForbidden, 13 ExternalReferenceForbidden) 14 15 __origin__ = "xml.sax.expatreader" 16 17 18 class DefusedExpatParser(_ExpatParser): 19 """Defused SAX driver for the pyexpat C module.""" 20 21 def __init__(self, namespaceHandling=0, bufsize=2 ** 16 - 20, 22 forbid_dtd=False, forbid_entities=True, 23 forbid_external=True): 24 _ExpatParser.__init__(self, namespaceHandling, bufsize) 25 self.forbid_dtd = forbid_dtd 26 self.forbid_entities = forbid_entities 27 self.forbid_external = forbid_external 28 29 def defused_start_doctype_decl(self, name, sysid, pubid, 30 has_internal_subset): 31 raise DTDForbidden(name, sysid, pubid) 32 33 def defused_entity_decl(self, name, is_parameter_entity, value, base, 34 sysid, pubid, notation_name): 35 raise EntitiesForbidden(name, value, base, sysid, pubid, notation_name) 36 37 def defused_unparsed_entity_decl(self, name, base, sysid, pubid, 38 notation_name): 39 # expat 1.2 40 raise EntitiesForbidden(name, None, base, sysid, pubid, notation_name) 41 42 def defused_external_entity_ref_handler(self, context, base, sysid, 43 pubid): 44 raise ExternalReferenceForbidden(context, base, sysid, pubid) 45 46 def reset(self): 47 _ExpatParser.reset(self) 48 parser = self._parser 49 if self.forbid_dtd: 50 parser.StartDoctypeDeclHandler = self.defused_start_doctype_decl 51 if self.forbid_entities: 52 parser.EntityDeclHandler = self.defused_entity_decl 53 parser.UnparsedEntityDeclHandler = self.defused_unparsed_entity_decl 54 if self.forbid_external: 55 parser.ExternalEntityRefHandler = self.defused_external_entity_ref_handler 56 57 58 def create_parser(*args, **kwargs): 59 return DefusedExpatParser(*args, **kwargs)