[Lxml-checkins] r44883 - in lxml/trunk: . src/lxml src/lxml/tests

scoder at codespeak.net scoder at codespeak.net
Mon Jul 9 22:13:49 CEST 2007


Author: scoder
Date: Mon Jul  9 22:13:48 2007
New Revision: 44883

Modified:
   lxml/trunk/CHANGES.txt
   lxml/trunk/src/lxml/apihelpers.pxi
   lxml/trunk/src/lxml/tests/test_etree.py
Log:
raise ValueError tag names containing ':'

Modified: lxml/trunk/CHANGES.txt
==============================================================================
--- lxml/trunk/CHANGES.txt	(original)
+++ lxml/trunk/CHANGES.txt	Mon Jul  9 22:13:48 2007
@@ -34,6 +34,8 @@
 Bugs fixed
 ----------
 
+* ``Element()`` did not raise an exception on tag names containing ':'
+
 * The XML parser did not report undefined entities as error
 
 * The text in exceptions raised by XML parsers, validators and XPath

Modified: lxml/trunk/src/lxml/apihelpers.pxi
==============================================================================
--- lxml/trunk/src/lxml/apihelpers.pxi	(original)
+++ lxml/trunk/src/lxml/apihelpers.pxi	Mon Jul  9 22:13:48 2007
@@ -708,6 +708,8 @@
         c_ns_end = cstd.strchr(c_tag, c'}')
         if c_ns_end is NULL:
             raise ValueError, "Invalid tag name"
+        if cstd.strchr(c_ns_end, c':') is not NULL:
+            raise ValueError, "Invalid tag name"
         nslen  = c_ns_end - c_tag
         taglen = python.PyString_GET_SIZE(tag) - nslen - 2
         if taglen == 0:
@@ -717,6 +719,8 @@
         tag = python.PyString_FromStringAndSize(c_ns_end+1, taglen)
     elif python.PyString_GET_SIZE(tag) == 0:
         raise ValueError, "Empty tag name"
+    elif cstd.strchr(c_tag, c':') is not NULL:
+        raise ValueError, "Invalid tag name"
     return ns, tag
 
 cdef object _namespacedName(xmlNode* c_node):

Modified: lxml/trunk/src/lxml/tests/test_etree.py
==============================================================================
--- lxml/trunk/src/lxml/tests/test_etree.py	(original)
+++ lxml/trunk/src/lxml/tests/test_etree.py	Mon Jul  9 22:13:48 2007
@@ -52,14 +52,27 @@
 
     def test_element_names(self):
         Element = self.etree.Element
-        
         el = Element('name')
         self.assertEquals(el.tag, 'name')
         el = Element('{}name')
         self.assertEquals(el.tag, 'name')
+
+    def test_element_name_empty(self):
+        Element = self.etree.Element
+        el = Element('name')
+        self.assertRaises(ValueError, Element, '{}')
+        self.assertRaises(ValueError, setattr, el, 'tag', '{}')
+
         self.assertRaises(ValueError, Element, '{test}')
         self.assertRaises(ValueError, setattr, el, 'tag', '{test}')
 
+    def test_element_name_colon(self):
+        Element = self.etree.Element
+        self.assertRaises(ValueError, Element, 'p:name')
+
+        el = Element('name')
+        self.assertRaises(ValueError, setattr, el, 'tag', 'p:name')
+
     def test_attribute_set(self):
         # ElementTree accepts arbitrary attribute values
         # lxml.etree allows only strings


More information about the lxml-checkins mailing list