
    =Og^                        	 g d Z ddlZddlZddlZddlZddlmZ ddlmZ	 e	j
        Z
dZdZdZdZd	Zd
ZdZ e
d          Z e
d          Z ej        dej        ej        z            Z ej        d          Z ej        d          Zej        j        Zd Z	 	 ddZ G d d          Z G d d          Z G d de           Z!dS ))Headerdecode_headermake_header    N)HeaderParseError)charset
     z         N   z 	us-asciizutf-8ai  
  =\?                   # literal =?
  (?P<charset>[^?]*?)   # non-greedy up to the next ? is the charset
  \?                    # literal ?
  (?P<encoding>[qQbB])  # either a "q" or a "b", case insensitive
  \?                    # literal ?
  (?P<encoded>.*?)      # non-greedy up to the next ?= is the encoded string
  \?=                   # literal ?=
  z[\041-\176]+:$z
\n[^ \t]+:c                    	 t          | d          rd | j        D             S t                              |           s| d fgS g }|                                 D ]}t                              |          }d}|r|                    d          }|r|                                }d}|r|                    |d d f           |r{|                    d          	                                }|                    d          	                                }|                    d          }|                    |||f           |ƌg }	t          |          D ]_\  }
}|
dk    rT|d         rL||
dz
           d         r;||
dz
           d                                         r|	                    |
dz
             `t          |	          D ]}||= g }|D ]\  }}}||                    ||f            |dk    r7t          j                            |          }|                    ||f           ]|d	k    r~t!          |          d
z  }|r|dd d
|z
           z  }	 t          j                            |          }|                    ||f           # t&          j        $ r t+          d          w xY wt-          d|z             g }d x}}|D ]h\  }}t/          |t0                    rt3          |d          }||}|}1||k    r|                    ||f           |}|}S||t4          |z   z  }c||z  }i|                    ||f           |S )N_chunksc                 v    g | ]6\  }}t          j        |t          |                    t          |          f7S  )_charset_encodestr).0stringr   s      %/usr/lib64/python3.11/email/header.py
<listcomp>z!decode_header.<locals>.<listcomp>K   sJ     ; ; ;' !&#g,,77WF ; ; ;    Tr   F      qb   z===zBase64 decoding errorzUnexpected encoding: zraw-unicode-escape)hasattrr   ecresearch
splitlinessplitpoplstripappendlower	enumerateisspacereversedemail
quoprimimeheader_decodelen
base64mimedecodebinasciiErrorr   AssertionError
isinstancer   bytesBSPACE)headerwordslinepartsfirst	unencodedr   encodingencodeddroplistnwddecoded_wordsencoded_stringwordpaderr	collapsed	last_wordlast_charsets                       r   r   r   ;   s    vy!! ;; ;+1>; ; ; 	; ;;v   E!!## ; ;

4   	;		!I %,,..	 6it4555 ;))A,,,,.. 99Q<<--//))A,,gx9:::  	; H%   ! !1Q331Q43E!A#JqM3eAaCjm.C.C.E.E3OOAaC   h  !HH
 M-2 E E)'  .'!:;;;;__#11.AAD  $1111__((1,F 5%V"446'..~>> $$dG_5555 > @ @ @&'>???@
 !!88!CDDD I##I&  gdC   	5344DI"LL$$i6777I"LL!$&IIIIi.///s   JJ'c                     	 t          |||          }| D ]A\  }}|$t          |t                    st          |          }|                    ||           B|S )N)
maxlinelenheader_namecontinuation_ws)r   r4   Charsetr&   )decoded_seqrK   rL   rM   hsr   s          r   r   r      su    	 	*+.	0 	0 	0A!  
7z'7'C'Cg&&G	GHr   c                   D    e Zd Z	 	 	 ddZd Zd ZddZd ZddZd Z	dS )r   Nr	   strictc                 $   	 |t           }n$t          |t                    st          |          }|| _        || _        g | _        ||                     |||           |t          }|| _        |	d| _	        d S t          |          dz   | _	        d S )Nr   r   )USASCIIr4   rN   r   _continuation_wsr   r&   
MAXLINELEN_maxlinelen
_headerlenr.   )selfrQ   r   rK   rL   rM   errorss          r   __init__zHeader.__init__   s    	4 ?GGGW-- 	'g&&G /=KK7F+++#J%DOOO "+..2DOOOr   c                 6   	 |                                   g }d }d }| j        D ]\  }}|}|t          j        k    r,|                    dd          }|                    dd          }|rd|o|                     |d                   }|dvr#|dv r|s|                    t                     d }n |dvr|s|                    t                     |o|                     |d                   }|}|                    |           t          
                    |          S )Nasciisurrogateescapereplacer   Nr   )
_normalizer   r   UNKNOWN8BITencoder0   	_nonctextr&   SPACEEMPTYSTRINGjoin)	rZ   uchunkslastcs	lastspacer   r   nextcsoriginal_byteshasspaces	            r   __str__zHeader.__str__   s9   4	#| 	# 	#OFG F---!'w8I!J!J'..w	BB *!?dnnVAY&?&?!333!333H3u---!%#555i5NN5)))=4>>&*#=#=IFNN6""""(((r   c                 (    |t          |           k    S N)r   )rZ   others     r   __eq__zHeader.__eq__   s     D		!!r   c                    	 || j         }n$t          |t                    st          |          }t          |t                    sF|j        pd}|t           j        k    r|                    dd          }n|                    ||          }|j        pd}|t           j        k    r6	 |                    ||           n# t          $ r |dk    r t          }Y nw xY w| j                            ||f           d S )Nr   r_   )r   r4   rN   r   input_codecrd   r0   output_codecre   UnicodeEncodeErrorUTF8r   r&   )rZ   rQ   r   r[   input_charsetoutput_charsets         r   r&   zHeader.append  s   	( ?mGGGW-- 	'g&&G!S!! 	4#/=:M 444HHZ):;;HH]F33 !-;X1110000%   !:-- 	QL)))))s   %B< <CCc                 4    	 |                                 p|dv S )N)()\)r)   )rZ   rQ   s     r   rf   zHeader._nonctext0  s     	yy{{3a#333r   ;, 	r   c                    	 |                                   || j        }|dk    rd}t          | j        || j        |          }d }d x}}| j        D ]\  }}	|V|o|                     |d                   }|dvr|r|	dvr|                                 n|	dvr|s|                                 |o|                     |d                   }|	}d}|                                }
|
r|	                    d|
d         |	           n|	                    dd|	           |
dd          D ]}|
                                 |	j        2|	                    | j        d|                                z   |	           O|                                }|d t          |          t          |          z
           }|	                    |||	           t          |
          dk    r|
                                 | j        r|                                 |                    |          }t                              |          r"t#          d	                    |                    |S )
Nr   i@B ra   rb   Fr   r   r	   z8header value appears to contain an embedded header: {!r})rc   rX   _ValueFormatterrY   rV   r   rf   add_transitionr"   feednewlineheader_encodingr%   r.   _str_embedded_headerr!   r   format)rZ   
splitcharsrK   linesep	formatterrk   ro   rl   r   r   linesr9   slinefwsvalues                  r   re   zHeader.encode5  s   	@ 	)J ?? J#DOZ$($9:G G	##9#| 	$ 	$OFG#!?dnnVAY&?&?!333# 3w6H'H'H!00222$666y6,,...=4>>&*#=#=IFH%%''E 0r58W5555r2w///abb	 8 8!!###*6NN4#8#:M#*, , , , !KKMME4D		#e** 445CNN3w77775zzA~~!!###< 	'$$&&&w''""5)) 	:" $++16%==: : :r   c                 @   g }d }g }| j         D ]W\  }}||k    r|                    |           !|/|                    t                              |          |f           |g}|}X|r/|                    t                              |          |f           || _         d S rr   )r   r&   rg   ri   )rZ   chunksrI   
last_chunkr   r   s         r   rc   zHeader._normalize  s     
#| 	' 	'OFG,&&!!&))))+MM5::j#9#9<"HIII$X
& 	BMM5::j11<@AAAr   )NNNNr	   rS   )NrS   )r   Nr   )
__name__
__module____qualname__r\   rp   rt   r&   rf   re   rc   r   r   r   r   r      s        '+.2-5-3 -3 -3 -3^) ) )@" " ")* )* )* )*V4 4 4
N N N N`    r   r   c                   D    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
S )r   c                     || _         || _        t          |          | _        || _        g | _        t          |          | _        d S rr   )_maxlenrV   r.   _continuation_ws_len_splitchars_lines_Accumulator_current_line)rZ   	headerlenmaxlenrM   r   s        r   r\   z_ValueFormatter.__init__  sF     /$'$8$8!%))44r   c                 ^    |                                   |                    | j                  S rr   )r   ri   r   )rZ   r   s     r   r   z_ValueFormatter._str  s#    ||DK(((r   c                 6    |                      t                    S rr   )r   NLrZ   s    r   rp   z_ValueFormatter.__str__  s    yy}}r   c                    | j                                         }|dk    r | j         j        |  t          | j                   dk    rt| j                                         r/| j        r(| j        dxx         t          | j                   z  cc<   n,| j                            t          | j                              | j                                          d S )N)r	   r   r   rb   )	r   r$   pushr.   	is_onlywsr   r   r&   reset)rZ   end_of_lines     r   r   z_ValueFormatter.newline  s    (,,..)###D#[11t!""Q&&!++-- <$+ <B3t'9#:#::""3t'9#:#:;;;  """""r   c                 <    | j                             dd           d S )Nr	   r   )r   r   r   s    r   r   z_ValueFormatter.add_transition  s!    R(((((r   c                 $   |j         |                     ||| j                   d S |                    ||                                           }	 |                    d          }n# t          $ r Y d S w xY w||                     ||           	 |                                }n# t          $ r Y d S w xY w|                                  | j	        
                    | j        |           |D ]$}| j                            | j        |z              %d S Nr   )r   _ascii_splitr   header_encode_lines_maxlengthsr$   
IndexError_append_chunkr   r   r   rV   r   r&   )rZ   r   r   r   encoded_lines
first_line	last_liner9   s           r   r   z_ValueFormatter.feed  sI    "*c64+;<<<F  33FD<L<L<N<NOO	&**1--JJ 	 	 	FF	 !sJ///	%))++II 	 	 	FF	 	 5yAAA! 	= 	=DKt4t;<<<<	= 	=s$   A% %
A32A3B$ $
B21B2c              #   h   K   | j         t          | j                  z
  V  	 | j         | j        z
  V  rr   )r   r.   r   r   r   s    r   r   z_ValueFormatter._maxlengths  sD      lS!3444444	;,!:::::	;r   c                    t          j        dt          z   dz   ||z             }|d         r	dg|d d<   n|                    d           t	          t          |          gdz   D ]\  }}|                     ||           d S )Nz([z]+)r   r   r   )rer#   FWSr$   zipiterr   )rZ   r   r   r   r:   parts         r   r   z_ValueFormatter._ascii_split  s     c%V448 	E"1"IIIIaLLLtE{{mAo. 	* 	*ICsD))))	* 	*r   c                 ,   | j                             ||           t          | j                   | j        k    rZ| j        D ]}t          | j                                         dz
  dd          D ]_}|                                r#| j         |         d         }|r|d         |k    r n(| j         |dz
           d         }|r|d         |k    r n` na| j                                         \  }}| j         j	        dk    r| 
                                 |sd}| j                             ||           d S | j                             |          }| j                            t          | j                              | j                             |           d S d S )Nr   r   rb   r	   )r   r   r.   r   r   range
part_countr)   r$   _initial_sizer   pop_fromr   r&   r   r   )rZ   r   r   chiprevpartr   	remainders           r   r   z_ValueFormatter._append_chunk  s   V,,,t!""T\11 &  t1<<>>q@!RHH 	 	Azz|| ""03A6 "3q62::!E#1!A#6q9H HRL"$4$4 .2244	T%3a77LLNNN " ""''T222*33A66IKs4#566777$$Y/////9 21r   N)r   r   r   r\   r   rp   r   r   r   r   r   r   r   r   r   r   r     s        5 5 5) ) )  	# 	# 	#) ) )#= #= #=J; ; ;* * *,0 0 0 0 0r   r   c                   \     e Zd Zd fd	Zd ZddZ fdZd Zd Zdd	Z	d
 Z
 fdZ xZS )r   r   c                 V    || _         t                                                       d S rr   )r   superr\   )rZ   initial_size	__class__s     r   r\   z_Accumulator.__init__  s'    )r   c                 4    |                      ||f           d S rr   )r&   )rZ   r   r   s      r   r   z_Accumulator.push  s    S&M"""""r   c                 (    | |d          }g | |d <   |S rr   r   )rZ   r   poppeds      r   r   z_Accumulator.pop_from!  s!    abbQRRr   c                 x    |                                  dk    rdS t                                                      S )Nr   )r   r   )r   r   r$   rZ   r   s    r   r$   z_Accumulator.pop&  s/    ??a8ww{{}}r   c                 @    t          d | D             | j                  S )Nc              3   Z   K   | ]&\  }}t          |          t          |          z   V  'd S rr   )r.   r   r   r   s      r   	<genexpr>z'_Accumulator.__len__.<locals>.<genexpr>,  s7      ==93CHHSYY&======r   )sumr   r   s    r   __len__z_Accumulator.__len__+  s+    =====%' ' 	'r   c                 J    t                               d | D                       S )Nc              3   T   K   | ]#\  }}t                               ||f          V  $d S rr   rh   ri   r   s      r   r   z'_Accumulator.__str__.<locals>.<genexpr>0  sL       !7 !7$-C "-!1!13+!>!> !7 !7 !7 !7 !7 !7r   r   r   s    r   rp   z_Accumulator.__str__/  s6     !7 !715!7 !7 !7 8 8 	8r   Nc                 *    |g }|| d d <   d| _         d S r   )r   )rZ   startvals     r   r   z_Accumulator.reset3  s(    HQQQr   c                 `    | j         dk    o#|  p t          |                                           S r   )r   r   r)   r   s    r   r   z_Accumulator.is_onlyws9  s.    !1$Jd(*Ic$ii6G6G6I6IJr   c                 D    t                                                      S rr   )r   r   r   s    r   r   z_Accumulator.part_count<  s    ww   r   )r   rr   )r   r   r   r\   r   r   r$   r   rp   r   r   r   __classcell__)r   s   @r   r   r     s             # # #   
    
' ' '8 8 8   K K K! ! ! ! ! ! ! ! !r   r   )NNr	   )"__all__r   r1   email.quoprimimer+   email.base64mimeemail.errorsr   r   r   rN   r   rg   r6   SPACE8rh   rW   r   rU   ry   compileVERBOSE	MULTILINEr    fcrer   r,   _max_appendr   r   r   r   listr   r   r   r   <module>r      s  
 2   
			          ) ) ) ) ) ) % % % % % %

			

'*

ww rz  
zBL " " rz#$$ 2:m,,  *[ [ [| ;? #   ,f f f f f f f fR}0 }0 }0 }0 }0 }0 }0 }0@%! %! %! %! %!4 %! %! %! %! %!r   