54 lines
1.7 KiB
Diff
54 lines
1.7 KiB
Diff
|
Index: Lib/test/test_pyexpat.py
|
||
|
===================================================================
|
||
|
--- Lib/test/test_pyexpat.py (revision 74428)
|
||
|
+++ Lib/test/test_pyexpat.py (revision 74429)
|
||
|
@@ -559,7 +559,25 @@
|
||
|
parser.Parse(xml2, 1)
|
||
|
self.assertEquals(self.n, 4)
|
||
|
|
||
|
+class MalformedInputText(unittest.TestCase):
|
||
|
+ def test1(self):
|
||
|
+ xml = "\0\r\n"
|
||
|
+ parser = expat.ParserCreate()
|
||
|
+ try:
|
||
|
+ parser.Parse(xml, True)
|
||
|
+ self.fail()
|
||
|
+ except expat.ExpatError as e:
|
||
|
+ self.assertEquals(str(e), 'no element found: line 2, column 1')
|
||
|
|
||
|
+ def test2(self):
|
||
|
+ xml = "<?xml version\xc2\x85='1.0'?>\r\n"
|
||
|
+ parser = expat.ParserCreate()
|
||
|
+ try:
|
||
|
+ parser.Parse(xml, True)
|
||
|
+ self.fail()
|
||
|
+ except expat.ExpatError as e:
|
||
|
+ self.assertEquals(str(e), 'XML declaration not well-formed: line 1, column 14')
|
||
|
+
|
||
|
def test_main():
|
||
|
run_unittest(SetAttributeTest,
|
||
|
ParseTest,
|
||
|
@@ -569,7 +587,8 @@
|
||
|
HandlerExceptionTest,
|
||
|
PositionTest,
|
||
|
sf1296433Test,
|
||
|
- ChardataBufferTest)
|
||
|
+ ChardataBufferTest,
|
||
|
+ MalformedInputText)
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
test_main()
|
||
|
Index: Modules/expat/xmltok_impl.c
|
||
|
===================================================================
|
||
|
--- Modules/expat/xmltok_impl.c (revision 74428)
|
||
|
+++ Modules/expat/xmltok_impl.c (revision 74429)
|
||
|
@@ -1741,7 +1741,7 @@
|
||
|
const char *end,
|
||
|
POSITION *pos)
|
||
|
{
|
||
|
- while (ptr != end) {
|
||
|
+ while (ptr < end) {
|
||
|
switch (BYTE_TYPE(enc, ptr)) {
|
||
|
#define LEAD_CASE(n) \
|
||
|
case BT_LEAD ## n: \
|