Backport of r77429. Not merged/blocked as svnmerge.py is not liking me right now.

This commit is contained in:
Brett Cannon 2009-08-13 19:58:01 +00:00
parent dffc1b8932
commit 2f82738988
4 changed files with 25 additions and 3 deletions

View File

@ -510,6 +510,24 @@ class ChardataBufferTest(unittest.TestCase):
parser.Parse(xml2, 1) parser.Parse(xml2, 1)
self.assertEquals(self.n, 4) 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(): def test_main():
run_unittest(SetAttributeTest, run_unittest(SetAttributeTest,
@ -520,7 +538,8 @@ def test_main():
HandlerExceptionTest, HandlerExceptionTest,
PositionTest, PositionTest,
sf1296433Test, sf1296433Test,
ChardataBufferTest) ChardataBufferTest,
MalformedInputText)
if __name__ == "__main__": if __name__ == "__main__":
test_main() test_main()

View File

@ -184,6 +184,7 @@ Ismail Donmez
Dima Dorfman Dima Dorfman
Cesar Douady Cesar Douady
Dean Draayer Dean Draayer
Fred L. Drake, Jr.
John DuBois John DuBois
Paul Dubois Paul Dubois
Graham Dumpleton Graham Dumpleton
@ -372,7 +373,6 @@ Irmen de Jong
Lucas de Jonge Lucas de Jonge
John Jorgensen John Jorgensen
Jens B. Jorgensen Jens B. Jorgensen
Fred L. Drake, Jr.
Andreas Jung Andreas Jung
Tattoo Mabonzo K. Tattoo Mabonzo K.
Bob Kahn Bob Kahn
@ -409,6 +409,7 @@ Holger Krekel
Michael Kremer Michael Kremer
Fabian Kreutz Fabian Kreutz
Hannu Krosing Hannu Krosing
Ivan Krstić
Andrew Kuchling Andrew Kuchling
Vladimir Kushnir Vladimir Kushnir
Cameron Laird Cameron Laird

View File

@ -122,6 +122,8 @@ Library
Extension Modules Extension Modules
----------------- -----------------
- Fix a segfault that could be triggered by expat with specially formed input.
- Issue #6561: '\d' in a regex now matches only characters with - Issue #6561: '\d' in a regex now matches only characters with
Unicode category 'Nd' (Number, Decimal Digit). Previously it also Unicode category 'Nd' (Number, Decimal Digit). Previously it also
matched characters with category 'No'. matched characters with category 'No'.

View File

@ -1741,7 +1741,7 @@ PREFIX(updatePosition)(const ENCODING *enc,
const char *end, const char *end,
POSITION *pos) POSITION *pos)
{ {
while (ptr != end) { while (ptr < end) {
switch (BYTE_TYPE(enc, ptr)) { switch (BYTE_TYPE(enc, ptr)) {
#define LEAD_CASE(n) \ #define LEAD_CASE(n) \
case BT_LEAD ## n: \ case BT_LEAD ## n: \