mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	_parsegen(): Move the message/rfc822 clause to after the
message/delivery-status clause, and genericize it to handle all (other) message/* content types. This lets us correctly parse 2 more of Anthony's MIME torture tests (specifically, the message/external-body examples).
This commit is contained in:
		
							parent
							
								
									c312b07d77
								
							
						
					
					
						commit
						d38f448865
					
				
					 1 changed files with 13 additions and 12 deletions
				
			
		|  | @ -211,21 +211,12 @@ def _parsegen(self): | |||
|                 lines.append(line) | ||||
|             self._cur.set_payload(EMPTYSTRING.join(lines)) | ||||
|             return | ||||
|         # So now the input is sitting at the first body line.  If the message | ||||
|         # claims to be a message/rfc822 type, then what follows is another RFC | ||||
|         # 2822 message. | ||||
|         if self._cur.get_content_type() == 'message/rfc822': | ||||
|             for retval in self._parsegen(): | ||||
|                 if retval is NeedMoreData: | ||||
|                     yield NeedMoreData | ||||
|                     continue | ||||
|                 break | ||||
|             self._pop_message() | ||||
|             return | ||||
|         if self._cur.get_content_type() == 'message/delivery-status': | ||||
|             # message/delivery-status contains blocks of headers separated by | ||||
|             # a blank line.  We'll represent each header block as a separate | ||||
|             # nested message object.  A blank line separates the subparts. | ||||
|             # nested message object, but the processing is a bit different | ||||
|             # than standard message/* types because there is no body for the | ||||
|             # nested messages.  A blank line separates the subparts. | ||||
|             while True: | ||||
|                 self._input.push_eof_matcher(NLCRE.match) | ||||
|                 for retval in self._parsegen(): | ||||
|  | @ -249,6 +240,16 @@ def _parsegen(self): | |||
|                 # Not at EOF so this is a line we're going to need. | ||||
|                 self._input.unreadline(line) | ||||
|             return | ||||
|         if self._cur.get_content_maintype() == 'message': | ||||
|             # The message claims to be a message/* type, then what follows is | ||||
|             # another RFC 2822 message. | ||||
|             for retval in self._parsegen(): | ||||
|                 if retval is NeedMoreData: | ||||
|                     yield NeedMoreData | ||||
|                     continue | ||||
|                 break | ||||
|             self._pop_message() | ||||
|             return | ||||
|         if self._cur.get_content_maintype() == 'multipart': | ||||
|             boundary = self._cur.get_boundary() | ||||
|             if boundary is None: | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Barry Warsaw
						Barry Warsaw