Revision: 290
Author: bslatkin
Date: Mon Oct 26 08:57:19 2009
Log: fixed external entity processing
http://code.google.com/p/pubsubhubbub/source/detail?r=290
Modified:
/trunk/hub/feed_diff.py
/trunk/hub/feed_diff_test.py
=======================================
--- /trunk/hub/feed_diff.py Mon Aug 24 23:34:17 2009
+++ /trunk/hub/feed_diff.py Mon Oct 26 08:57:19 2009
@@ -34,6 +34,13 @@
"""Exception for errors in this module."""
+class TrivialEntityResolver(xml.sax.handler.EntityResolver):
+ """Pass-through entity resolver."""
+
+ def resolveEntity(self, publicId, systemId):
+ return cStringIO.StringIO()
+
+
class FeedContentHandler(xml.sax.handler.ContentHandler):
"""Sax content handler for quickly parsing Atom and RSS feeds."""
@@ -217,7 +224,11 @@
raise Error('Invalid feed format "%s"' % format)
parser.setContentHandler(handler)
- parser.parse(data_stream)
+ parser.setEntityResolver(TrivialEntityResolver())
+ try:
+ parser.parse(data_stream)
+ except IOError, e:
+ raise Error('Encountered IOError while parsing: %s' % e)
for entry_id, content in handler.entries_map.iteritems():
if format == 'atom' and not entry_id:
=======================================
--- /trunk/hub/feed_diff_test.py Mon Aug 24 23:34:17 2009
+++ /trunk/hub/feed_diff_test.py Mon Oct 26 08:57:19 2009
@@ -249,6 +249,19 @@
self.verify_entries(expected_list, entries)
+class FilterTest(TestBase):
+
+ format = 'atom'
+
+ def testEntities(self):
+ """Tests that external entities cause parsing to fail."""
+ try:
+ self.load_feed('xhtml_entities.xml')
+ self.fail('Should have raised an exception')
+ except feed_diff.Error, e:
+ self.assertFalse('IOError' in str(e))
+
+
if __name__ == '__main__':
## feed_diff.DEBUG = True
## logging.getLogger().setLevel(logging.DEBUG)