Index: Lib/plistlib.py =================================================================== --- Lib/plistlib.py (revision 69418) +++ Lib/plistlib.py (working copy) @@ -397,12 +397,15 @@ self.root = None def parse(self, fileobj): - from xml.parsers.expat import ParserCreate + from xml.parsers.expat import ParserCreate, ExpatError parser = ParserCreate() parser.StartElementHandler = self.handleBeginElement parser.EndElementHandler = self.handleEndElement parser.CharacterDataHandler = self.handleData - parser.ParseFile(fileobj) + try: + parser.ParseFile(fileobj) + except ExpatError as ee: + raise ValueError("Invalid PropertyList content:\n %s" % ee) return self.root def handleBeginElement(self, element, attrs): Index: Lib/test/test_plistlib.py =================================================================== --- Lib/test/test_plistlib.py (revision 69418) +++ Lib/test/test_plistlib.py (working copy) @@ -183,7 +183,15 @@ self.assertEqual(test1, result1) self.assertEqual(test2, result2) - + def test_garbage(self): + pl = self._create() + data = plistlib.writePlistToString(pl) + from_str = plistlib.readPlistFromString + self.assertRaises(ValueError, from_str, data * 2) + self.assertRaises(ValueError, from_str, data[:100]) + self.assertRaises(ValueError, from_str, "invalid" + data) + self.assertRaises(ValueError, from_str, data + "invalid") + def test_main(): test_support.run_unittest(TestPlistlib)