Skip to content

Commit

Permalink
Check that _c_node is not NULL in each access method. Fix indentation.
Browse files Browse the repository at this point in the history
  • Loading branch information
doerwalter committed Dec 3, 2011
1 parent b637e61 commit 51b4302
Showing 1 changed file with 96 additions and 80 deletions.
176 changes: 96 additions & 80 deletions src/lxml/dtd.pxi
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ class DTDValidateError(DTDError):
"""
pass

cdef inline int _assertValidDTDNode(node, void *c_node) except -1:
assert c_node is not NULL, u"invalid DTD proxy at %s" % id(node)

@cython.internal
cdef class _DTDElementContentDecl:
cdef object _gc_dtd
Expand All @@ -27,38 +30,42 @@ cdef class _DTDElementContentDecl:

property name:
def __get__(self):
return funicode(self._c_node.name) if self._c_node.name is not NULL else None
_assertValidDTDNode(self, self._c_node)
return funicode(self._c_node.name) if self._c_node.name is not NULL else None

property type:
def __get__(self):
type = self._c_node.type
if type == tree.XML_ELEMENT_CONTENT_PCDATA:
return "pcdata"
elif type == tree.XML_ELEMENT_CONTENT_ELEMENT:
return "element"
elif type == tree.XML_ELEMENT_CONTENT_SEQ:
return "seq"
elif type == tree.XML_ELEMENT_CONTENT_OR:
return "or"
else:
return None
_assertValidDTDNode(self, self._c_node)
type = self._c_node.type
if type == tree.XML_ELEMENT_CONTENT_PCDATA:
return "pcdata"
elif type == tree.XML_ELEMENT_CONTENT_ELEMENT:
return "element"
elif type == tree.XML_ELEMENT_CONTENT_SEQ:
return "seq"
elif type == tree.XML_ELEMENT_CONTENT_OR:
return "or"
else:
return None

property occur:
def __get__(self):
occur = self._c_node.ocur
if occur == tree.XML_ELEMENT_CONTENT_ONCE:
return "once"
elif occur == tree.XML_ELEMENT_CONTENT_OPT:
return "opt"
elif occur == tree.XML_ELEMENT_CONTENT_MULT:
return "mult"
elif occur == tree.XML_ELEMENT_CONTENT_PLUS:
return "plus"
else:
return None
_assertValidDTDNode(self, self._c_node)
occur = self._c_node.ocur
if occur == tree.XML_ELEMENT_CONTENT_ONCE:
return "once"
elif occur == tree.XML_ELEMENT_CONTENT_OPT:
return "opt"
elif occur == tree.XML_ELEMENT_CONTENT_MULT:
return "mult"
elif occur == tree.XML_ELEMENT_CONTENT_PLUS:
return "plus"
else:
return None

property left:
def __get__(self):
_assertValidDTDNode(self, self._c_node)
c1 = self._c_node.c1
if c1 is not NULL:
node = _DTDElementContentDecl()
Expand All @@ -70,6 +77,7 @@ cdef class _DTDElementContentDecl:

property right:
def __get__(self):
_assertValidDTDNode(self, self._c_node)
c2 = self._c_node.c2
if c2 is not NULL:
node = _DTDElementContentDecl()
Expand All @@ -90,51 +98,55 @@ cdef class _DTDAttributeDecl:

property name:
def __get__(self):
return funicode(self._c_node.name) if self._c_node.name is not NULL else None
_assertValidDTDNode(self, self._c_node)
return funicode(self._c_node.name) if self._c_node.name is not NULL else None

property type:
def __get__(self):
type = self._c_node.atype
if type == tree.XML_ATTRIBUTE_CDATA:
return "cdata"
elif type == tree.XML_ATTRIBUTE_ID:
return "id"
elif type == tree.XML_ATTRIBUTE_IDREF:
return "idref"
elif type == tree.XML_ATTRIBUTE_IDREFS:
return "idrefs"
elif type == tree.XML_ATTRIBUTE_ENTITY:
return "entity"
elif type == tree.XML_ATTRIBUTE_ENTITIES:
return "entities"
elif type == tree.XML_ATTRIBUTE_NMTOKEN:
return "nmtoken"
elif type == tree.XML_ATTRIBUTE_NMTOKENS:
return "nmtokens"
elif type == tree.XML_ATTRIBUTE_ENUMERATION:
return "enumeration"
elif type == tree.XML_ATTRIBUTE_NOTATION:
return "notation"
else:
return None
_assertValidDTDNode(self, self._c_node)
type = self._c_node.atype
if type == tree.XML_ATTRIBUTE_CDATA:
return "cdata"
elif type == tree.XML_ATTRIBUTE_ID:
return "id"
elif type == tree.XML_ATTRIBUTE_IDREF:
return "idref"
elif type == tree.XML_ATTRIBUTE_IDREFS:
return "idrefs"
elif type == tree.XML_ATTRIBUTE_ENTITY:
return "entity"
elif type == tree.XML_ATTRIBUTE_ENTITIES:
return "entities"
elif type == tree.XML_ATTRIBUTE_NMTOKEN:
return "nmtoken"
elif type == tree.XML_ATTRIBUTE_NMTOKENS:
return "nmtokens"
elif type == tree.XML_ATTRIBUTE_ENUMERATION:
return "enumeration"
elif type == tree.XML_ATTRIBUTE_NOTATION:
return "notation"
else:
return None

property default:
def __get__(self):
default = self._c_node.def_
if default == tree.XML_ATTRIBUTE_NONE:
return "none"
elif default == tree.XML_ATTRIBUTE_REQUIRED:
return "required"
elif default == tree.XML_ATTRIBUTE_IMPLIED:
return "implied"
elif default == tree.XML_ATTRIBUTE_FIXED:
return "fixed"
else:
return None
_assertValidDTDNode(self, self._c_node)
default = self._c_node.def_
if default == tree.XML_ATTRIBUTE_NONE:
return "none"
elif default == tree.XML_ATTRIBUTE_REQUIRED:
return "required"
elif default == tree.XML_ATTRIBUTE_IMPLIED:
return "implied"
elif default == tree.XML_ATTRIBUTE_FIXED:
return "fixed"
else:
return None

property defaultValue:
def __get__(self):
return funicode(self._c_node.defaultValue) if self._c_node.defaultValue is not NULL else None
_assertValidDTDNode(self, self._c_node)
return funicode(self._c_node.defaultValue) if self._c_node.defaultValue is not NULL else None

@cython.internal
cdef class _DTDElementDecl:
Expand All @@ -147,26 +159,29 @@ cdef class _DTDElementDecl:

property name:
def __get__(self):
return funicode(self._c_node.name) if self._c_node.name is not NULL else None
_assertValidDTDNode(self, self._c_node)
return funicode(self._c_node.name) if self._c_node.name is not NULL else None

property type:
def __get__(self):
cdef int type = self._c_node.etype
if type == tree.XML_ELEMENT_TYPE_UNDEFINED:
return "undefined"
elif type == tree.XML_ELEMENT_TYPE_EMPTY:
return "empty"
elif type == tree.XML_ELEMENT_TYPE_ANY:
return "any"
elif type == tree.XML_ELEMENT_TYPE_MIXED:
return "mixed"
elif type == tree.XML_ELEMENT_TYPE_ELEMENT:
return "element"
else:
return None
_assertValidDTDNode(self, self._c_node)
cdef int type = self._c_node.etype
if type == tree.XML_ELEMENT_TYPE_UNDEFINED:
return "undefined"
elif type == tree.XML_ELEMENT_TYPE_EMPTY:
return "empty"
elif type == tree.XML_ELEMENT_TYPE_ANY:
return "any"
elif type == tree.XML_ELEMENT_TYPE_MIXED:
return "mixed"
elif type == tree.XML_ELEMENT_TYPE_ELEMENT:
return "element"
else:
return None

property content:
def __get__(self):
_assertValidDTDNode(self, self._c_node)
cdef tree.xmlElementContent *content = self._c_node.content
if content is not NULL:
node = _DTDElementContentDecl()
Expand All @@ -178,13 +193,14 @@ cdef class _DTDElementDecl:

property attributes:
def __get__(self):
cdef tree.xmlAttribute *c_node = self._c_node.attributes
while c_node is not NULL:
node = _DTDAttributeDecl()
node._gc_dtd = self._gc_dtd
node._c_node = c_node
yield node
c_node = <tree.xmlAttribute*>c_node.next
_assertValidDTDNode(self, self._c_node)
cdef tree.xmlAttribute *c_node = self._c_node.attributes
while c_node is not NULL:
node = _DTDAttributeDecl()
node._gc_dtd = self._gc_dtd
node._c_node = c_node
yield node
c_node = <tree.xmlAttribute*>c_node.next

################################################################################
# DTD
Expand Down

0 comments on commit 51b4302

Please sign in to comment.