]> granicus.if.org Git - python/commitdiff
readline(): RFC 2046, section 5.1.2 (and partially 5.1) both state that the
authorBarry Warsaw <barry@python.org>
Thu, 13 May 2004 20:17:51 +0000 (20:17 +0000)
committerBarry Warsaw <barry@python.org>
Thu, 13 May 2004 20:17:51 +0000 (20:17 +0000)
parser must recognize outer boundaries in inner parts.  So cruise through the
EOF stack backwards testing each predicate against the current line.

There's still some discussion about whether this is (always) the best thing to
do.  Anthony would rather parse these messages as if the outer boundaries were
ignored.  I think that's counter to the RFC, but might be practically more
useful.  Can you say behavior flag?  (ug).

Lib/email/FeedParser.py

index 294a6a5a789f83574c3f2987d9fba3b12f690456..ac3769d4b252d206bc3c5eff4d3c566bb3c53d0c 100644 (file)
@@ -71,9 +71,11 @@ class BufferedSubFile(object):
         # Pop the line off the stack and see if it matches the current
         # false-EOF predicate.
         line = self._lines.pop()
-        if self._eofstack:
-            matches = self._eofstack[-1]
-            if matches(line):
+        # RFC 2046, section 5.1.2 requires us to recognize outer level
+        # boundaries at any level of inner nesting.  Do this, but be sure it's
+        # in the order of most to least nested.
+        for ateof in self._eofstack[::-1]:
+            if ateof(line):
                 # We're at the false EOF.  But push the last line back first.
                 self._lines.append(line)
                 return ''