a
    åze&^  ã                   @   sä   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 dejejB ¡Ze d¡Ze d¡ZejjZdd„ Zddd„ZG dd„ dƒZG dd„ dƒZG d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              	   C   s–  t | dƒrdd„ | jD ƒS t | ¡s.| d fgS g }|  ¡ D ]€}t |¡}d}|r:| d¡}|rj| ¡ }d}|r~| |d d f¡ |rL| d¡ 	¡ }| d¡ 	¡ }| d¡}| |||f¡ qLq:g }	t
|ƒD ]J\}
}|
dkrÈ|d rÈ||
d  d rÈ||
d  d  ¡ rÈ|	 |
d ¡ qÈt|	ƒD ]}||= qg }|D ]È\}}}|d u rV| ||f¡ n¢|d	kr|tj |¡}| ||f¡ n||d
krìt|ƒd }|r¬|dd d| … 7 }ztj |¡}W n tjyÚ   tdƒ‚Y n0 | ||f¡ ntd| ƒ‚q2g }d  }}|D ]v\}}t|tƒr*t|dƒ}|d u r>|}|}nB||kr`| ||f¡ |}|}n |d u rx|t| 7 }n||7 }q| ||f¡ |S )NÚ_chunksc                 S   s(   g | ] \}}t  |t|ƒ¡t|ƒf‘qS © )Ú_charsetZ_encodeÚstr)Ú.0Ústringr   r   r   ú"/usr/lib/python3.9/email/header.pyÚ
<listcomp>M   s   ÿz!decode_header.<locals>.<listcomp>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Ú
quoprimimeZheader_decodeÚlenZ
base64mimeÚdecodeÚbinasciiÚErrorr   ÚAssertionErrorÚ
isinstancer   ÚbytesÚBSPACE)ÚheaderÚwordsÚlineÚpartsÚfirstZ	unencodedr   ÚencodingÚencodedZdroplistÚnÚwÚdZdecoded_wordsZencoded_stringZwordZpaderrZ	collapsedZ	last_wordÚlast_charsetr   r   r   r   =   s|    
ÿ




4







r   c                 C   sF   t |||d}| D ].\}}|d ur4t|tƒs4t|ƒ}| ||¡ q|S )N)Ú
maxlinelenÚheader_nameÚcontinuation_ws)r   r-   ÚCharsetr!   )Zdecoded_seqr;   r<   r=   ÚhÚsr   r   r   r   r   œ   s    ÿr   c                   @   sJ   e Zd Zddd„Zdd„ Zdd	„ Zdd
d„Zdd„ Zddd„Zdd„ Z	dS )r   Nr   Ústrictc                 C   s|   |d u rt }nt|tƒs t|ƒ}|| _|| _g | _|d urH|  |||¡ |d u rTt}|| _|d u rjd| _	nt
|ƒd | _	d S )Nr   r   )ÚUSASCIIr-   r>   r   Ú_continuation_wsr   r!   Ú
MAXLINELENÚ_maxlinelenÚ
_headerlenr(   )Úselfr@   r   r;   r<   r=   Úerrorsr   r   r   Ú__init__´   s    
zHeader.__init__c           	      C   sÄ   |   ¡  g }d }d }| jD ]ž\}}|}|tjkrH| dd¡}| dd¡}|r˜|o\|  |d ¡}|dvr‚|dv r˜|s˜| t¡ d }n|dvr˜|s˜| t¡ |o¨|  |d ¡}|}| |¡ qt	 
|¡S )NÚasciiÚsurrogateescapeÚreplacer   ©Nr   éÿÿÿÿ)Ú
_normalizer   r   ÚUNKNOWN8BITÚencoder)   Ú	_nonctextr!   ÚSPACEÚEMPTYSTRINGÚjoin)	rG   ZuchunksÚlastcsÚ	lastspacer   r   ZnextcsZoriginal_bytesÚhasspacer   r   r   Ú__str__ã   s*    


zHeader.__str__c                 C   s   |t | ƒkS ©N)r   )rG   Úotherr   r   r   Ú__eq__  s    zHeader.__eq__c                 C   s´   |d u r| j }nt|tƒs"t|ƒ}t|tƒsZ|jp4d}|t jkrN| dd¡}n| ||¡}|jpbd}|t jkr z| ||¡ W n  t	yž   |dkr–‚ t
}Y n0 | j ||f¡ d S )Nr   rK   )r   r-   r>   r   Zinput_codecrP   r)   Zoutput_codecrQ   ÚUnicodeEncodeErrorÚUTF8r   r!   )rG   r@   r   rH   Zinput_charsetÚoutput_charsetr   r   r   r!   	  s$    






zHeader.appendc                 C   s   |  ¡ p|dv S )N)ú(ú)ú\)r$   )rG   r@   r   r   r   rR   4  s    zHeader._nonctextú;, 	r   c                 C   s   |   ¡  |d u r| j}|dkr"d}t| j|| j|ƒ}d }d  }}| jD ]\}}	|d urœ|oh|  |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d ur"| 	| jd| ¡  |	¡ qð| ¡ }|d t|ƒt|ƒ … }| 	|||	¡ qðt|
ƒdkrF| 
¡  qF| jrx| ¡  | |¡}t |¡rœtd	 |¡ƒ‚|S )
Nr   i@B rM   rN   Fr
   r   r   z8header value appears to contain an embedded header: {!r})rO   rE   Ú_ValueFormatterrF   rC   r   rR   Úadd_transitionr   ÚfeedÚnewlineÚheader_encodingr    r(   Ú_strÚ_embedded_headerr   r   Úformat)rG   Ú
splitcharsr;   ÚlinesepÚ	formatterrV   rX   rW   r   r   Úlinesr2   ZslineÚfwsÚvaluer   r   r   rQ   9  sX    !ÿ
ÿ

ÿzHeader.encodec                 C   sx   g }d }g }| j D ]B\}}||kr.| |¡ q|d urJ| t |¡|f¡ |g}|}q|rn| t |¡|f¡ || _ d S rZ   )r   r!   rS   rU   )rG   Úchunksr:   Z
last_chunkr   r   r   r   r   rO   ‰  s    zHeader._normalize)NNNNr   rA   )NrA   )rc   Nr   )
Ú__name__Ú
__module__Ú__qualname__rI   rY   r\   r!   rR   rQ   rO   r   r   r   r   r   ³   s      þ
/ 
+
Pr   c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )rd   c                 C   s0   || _ || _t|ƒ| _|| _g | _t|ƒ| _d S rZ   )Ú_maxlenrC   r(   Ú_continuation_ws_lenÚ_splitcharsÚ_linesÚ_AccumulatorÚ_current_line)rG   Z	headerlenÚmaxlenr=   rl   r   r   r   rI   ž  s    
z_ValueFormatter.__init__c                 C   s   |   ¡  | | j¡S rZ   )rg   rU   ry   )rG   rm   r   r   r   ri   ¦  s    z_ValueFormatter._strc                 C   s
   |   t¡S rZ   )ri   ÚNL©rG   r   r   r   rY   ª  s    z_ValueFormatter.__str__c                 C   sv   | j  ¡ }|dkr| j j|Ž  t| j ƒdkrh| j  ¡ rV| jrV| jd  t| j ƒ7  < n| j t| j ƒ¡ | j  ¡  d S )N)r   r
   r   rN   )	r{   r   Úpushr(   Ú	is_onlywsry   r   r!   Úreset)rG   Zend_of_liner   r   r   rg   ­  s    
z_ValueFormatter.newlinec                 C   s   | j  dd¡ d S )Nr   r
   )r{   r   r~   r   r   r   re   ¸  s    z_ValueFormatter.add_transitionc                 C   sÀ   |j d u r|  ||| j¡ d S | ||  ¡ ¡}z| d¡}W n tyP   Y d S 0 |d urf|  ||¡ z| ¡ }W n ty†   Y d S 0 |  ¡  | j	 
| j|¡ |D ]}| j | j| ¡ q¤d S ©Nr   )rh   Ú_ascii_splitrx   Zheader_encode_linesÚ_maxlengthsr   Ú
IndexErrorÚ_append_chunkrg   r{   r   rC   ry   r!   )rG   rp   r   r   Zencoded_linesZ
first_lineÚ	last_liner2   r   r   r   rf   »  s$    
z_ValueFormatter.feedc                 c   s&   | j t| jƒ V  | j | j V  qd S rZ   )rv   r(   r{   rw   r~   r   r   r   r„   à  s    z_ValueFormatter._maxlengthsc                 C   sf   t  dt d || ¡}|d r0dg|d d…< n
| d¡ tt|ƒgd Ž D ]\}}|  ||¡ qLd S )Nz([z]+)r   r
   r   )Úrer   ÚFWSr   ÚzipÚiterr†   )rG   rp   r   rl   r3   Úpartr   r   r   rƒ   æ  s    
z_ValueFormatter._ascii_splitc                 C   s  | j  ||¡ t| j ƒ| jkr| jD ]v}t| j  ¡ d ddƒD ]T}| ¡ rn| j | d }|rn|d |krn q˜| j |d  d }|r@|d |kr@ q˜q@q& qÚq&| j  ¡ \}}| j j	dkrÈ|  
¡  |sÈd}| j  ||¡ d S | j  |¡}| j t| j ƒ¡ | j  |¡ d S )Nr   r   rN   r   )r{   r   r(   rv   rx   ÚrangeÚ
part_countr$   r   Ú_initial_sizerg   Úpop_fromry   r!   r   r   )rG   rp   r   ZchÚiZprevpartrŒ   Ú	remainderr   r   r   r†   ü  s.    
z_ValueFormatter._append_chunkN)rs   rt   ru   rI   ri   rY   rg   re   rf   r„   rƒ   r†   r   r   r   r   rd     s   %rd   c                       sj   e Zd Zd‡ fdd„	Zdd„ Zddd„Z‡ fdd	„Zd
d„ Zdd„ Zddd„Z	dd„ Z
‡ fdd„Z‡  ZS )rz   r   c                    s   || _ tƒ  ¡  d S rZ   )r   ÚsuperrI   )rG   Zinitial_size©Ú	__class__r   r   rI     s    z_Accumulator.__init__c                 C   s   |   ||f¡ d S rZ   )r!   )rG   rp   r   r   r   r   r   #  s    z_Accumulator.pushc                 C   s   | |d … }g | |d …< |S rZ   r   )rG   r‘   Zpoppedr   r   r   r   &  s    z_Accumulator.pop_fromc                    s   |   ¡ dkrdS tƒ  ¡ S )Nr   )r
   r
   )rŽ   r“   r   r~   r”   r   r   r   +  s    z_Accumulator.popc                 C   s   t dd„ | D ƒ| jƒS )Nc                 s   s"   | ]\}}t |ƒt |ƒ V  qd S rZ   )r(   ©r   rp   rŒ   r   r   r   Ú	<genexpr>1  ó    z'_Accumulator.__len__.<locals>.<genexpr>)Úsumr   r~   r   r   r   Ú__len__0  s    ÿz_Accumulator.__len__c                 C   s   t  dd„ | D ƒ¡S )Nc                 s   s    | ]\}}t  ||f¡V  qd S rZ   ©rT   rU   r–   r   r   r   r—   5  s   ÿz'_Accumulator.__str__.<locals>.<genexpr>r›   r~   r   r   r   rY   4  s    
ÿz_Accumulator.__str__Nc                 C   s"   |d u rg }|| d d …< d| _ d S r‚   )r   )rG   Zstartvalr   r   r   r   8  s    z_Accumulator.resetc                 C   s   | j dko|  pt| ƒ ¡ S r‚   )r   r   r$   r~   r   r   r   r€   >  s    z_Accumulator.is_onlywsc                    s
   t ƒ  ¡ S rZ   )r“   rš   r~   r”   r   r   rŽ   A  s    z_Accumulator.part_count)r   )r   )N)rs   rt   ru   rI   r   r   r   rš   rY   r   r€   rŽ   Ú__classcell__r   r   r”   r   rz     s   

rz   )NNr   )"Ú__all__rˆ   r*   Zemail.quoprimimer&   Zemail.base64mimeZemail.errorsr   r   r   r>   r}   rS   r/   ZSPACE8rT   rD   r‰   rB   r^   ÚcompileÚVERBOSEÚ	MULTILINEr   Zfcrerj   r'   Z_max_appendr   r   r   rd   Úlistrz   r   r   r   r   Ú<module>   s>   
ø

_  ÿ
 k 