mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	get_payload(): Teach this about various uunencoded
Content-Transfer-Encodings
This commit is contained in:
		
							parent
							
								
									3840b49d9c
								
							
						
					
					
						commit
						08898499b2
					
				
					 1 changed files with 21 additions and 10 deletions
				
			
		| 
						 | 
					@ -5,6 +5,7 @@
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import re
 | 
					import re
 | 
				
			||||||
 | 
					import uu
 | 
				
			||||||
import binascii
 | 
					import binascii
 | 
				
			||||||
import warnings
 | 
					import warnings
 | 
				
			||||||
from cStringIO import StringIO
 | 
					from cStringIO import StringIO
 | 
				
			||||||
| 
						 | 
					@ -165,13 +166,15 @@ class Message:
 | 
				
			||||||
        the list object, you modify the message's payload in place.  Optional
 | 
					        the list object, you modify the message's payload in place.  Optional
 | 
				
			||||||
        i returns that index into the payload.
 | 
					        i returns that index into the payload.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Optional decode is a flag (defaulting to False) indicating whether the
 | 
					        Optional decode is a flag indicating whether the payload should be
 | 
				
			||||||
        payload should be decoded or not, according to the
 | 
					        decoded or not, according to the Content-Transfer-Encoding header
 | 
				
			||||||
        Content-Transfer-Encoding header.  When True and the message is not a
 | 
					        (default is False).
 | 
				
			||||||
        multipart, the payload will be decoded if this header's value is
 | 
					
 | 
				
			||||||
        `quoted-printable' or `base64'.  If some other encoding is used, or
 | 
					        When True and the message is not a multipart, the payload will be
 | 
				
			||||||
        the header is missing, or if the payload has bogus base64 data, the
 | 
					        decoded if this header's value is `quoted-printable' or `base64'.  If
 | 
				
			||||||
        payload is returned as-is (undecoded).
 | 
					        some other encoding is used, or the header is missing, or if the
 | 
				
			||||||
 | 
					        payload has bogus data (i.e. bogus base64 or uuencoded data), the
 | 
				
			||||||
 | 
					        payload is returned as-is.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        If the message is a multipart and the decode flag is True, then None
 | 
					        If the message is a multipart and the decode flag is True, then None
 | 
				
			||||||
        is returned.
 | 
					        is returned.
 | 
				
			||||||
| 
						 | 
					@ -185,15 +188,23 @@ class Message:
 | 
				
			||||||
        if decode:
 | 
					        if decode:
 | 
				
			||||||
            if self.is_multipart():
 | 
					            if self.is_multipart():
 | 
				
			||||||
                return None
 | 
					                return None
 | 
				
			||||||
            cte = self.get('content-transfer-encoding', '')
 | 
					            cte = self.get('content-transfer-encoding', '').lower()
 | 
				
			||||||
            if cte.lower() == 'quoted-printable':
 | 
					            if cte == 'quoted-printable':
 | 
				
			||||||
                return Utils._qdecode(payload)
 | 
					                return Utils._qdecode(payload)
 | 
				
			||||||
            elif cte.lower() == 'base64':
 | 
					            elif cte == 'base64':
 | 
				
			||||||
                try:
 | 
					                try:
 | 
				
			||||||
                    return Utils._bdecode(payload)
 | 
					                    return Utils._bdecode(payload)
 | 
				
			||||||
                except binascii.Error:
 | 
					                except binascii.Error:
 | 
				
			||||||
                    # Incorrect padding
 | 
					                    # Incorrect padding
 | 
				
			||||||
                    return payload
 | 
					                    return payload
 | 
				
			||||||
 | 
					            elif cte in ('x-uuencode', 'uuencode', 'uue', 'x-uue'):
 | 
				
			||||||
 | 
					                sfp = StringIO()
 | 
				
			||||||
 | 
					                try:
 | 
				
			||||||
 | 
					                    uu.decode(StringIO(payload+'\n'), sfp)
 | 
				
			||||||
 | 
					                    payload = sfp.getvalue()
 | 
				
			||||||
 | 
					                except uu.Error:
 | 
				
			||||||
 | 
					                    # Some decoding problem
 | 
				
			||||||
 | 
					                    return payload
 | 
				
			||||||
        # Everything else, including encodings with 8bit or 7bit are returned
 | 
					        # Everything else, including encodings with 8bit or 7bit are returned
 | 
				
			||||||
        # unchanged.
 | 
					        # unchanged.
 | 
				
			||||||
        return payload
 | 
					        return payload
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue