mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +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) |                 lines.append(line) | ||||||
|             self._cur.set_payload(EMPTYSTRING.join(lines)) |             self._cur.set_payload(EMPTYSTRING.join(lines)) | ||||||
|             return |             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': |         if self._cur.get_content_type() == 'message/delivery-status': | ||||||
|             # message/delivery-status contains blocks of headers separated by |             # message/delivery-status contains blocks of headers separated by | ||||||
|             # a blank line.  We'll represent each header block as a separate |             # 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: |             while True: | ||||||
|                 self._input.push_eof_matcher(NLCRE.match) |                 self._input.push_eof_matcher(NLCRE.match) | ||||||
|                 for retval in self._parsegen(): |                 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. |                 # Not at EOF so this is a line we're going to need. | ||||||
|                 self._input.unreadline(line) |                 self._input.unreadline(line) | ||||||
|             return |             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': |         if self._cur.get_content_maintype() == 'multipart': | ||||||
|             boundary = self._cur.get_boundary() |             boundary = self._cur.get_boundary() | ||||||
|             if boundary is None: |             if boundary is None: | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Barry Warsaw
						Barry Warsaw