o
     JAf&^  ã                   @   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 ]A}t |¡}d}|r_| d¡}|r6| ¡ }d}|r@| |d d f¡ |r]| d¡ 	¡ }| d¡ 	¡ }| d¡}| |||f¡ |s)qg }	t
|ƒD ]%\}
}|
dkr‹|d r‹||
d  d r‹||
d  d  ¡ r‹|	 |
d ¡ qft|	ƒD ]}||= qg }|D ][\}}}|d u r«| ||f¡ qš|d	kr½tj |¡}| ||f¡ qš|d
krðt|ƒd }|rÓ|dd d| … 7 }ztj |¡}W n tjyç   tdƒ‚w | ||f¡ qštd| ƒ‚g }d  }}|D ]:\}}t|tƒrt|dƒ}|d u r|}|}qþ||kr(| ||f¡ |}|}qþ|d u r4|t| 7 }qþ||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.10/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   sH   	 t |||d}| D ]\}}|d urt|tƒst|ƒ}| ||¡ 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                   @   sP   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r%|  |||¡ |d u r+t}|| _|d u r7d| _	d S 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 ]O\}}|}|tjkr%| dd¡}| dd¡}|rM|o/|  |d ¡}|dvrB|dv rA|sA| t¡ d }n|dvrM|sM| t¡ |oU|  |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ƒs.|jpd}|t jkr(| dd¡}n| ||¡}|jp2d}|t jkrQz| ||¡ W n t	yP   |dkrL‚ t
}Y nw | 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rN|o4|  |d ¡}|dvrD|r?|	dvrC| ¡  n
|	dvrN|sN| ¡  |oV|  |d ¡}|	}d}| ¡ }
|
rk| 	d|
d |	¡ n| 	dd|	¡ |
dd … D ]/}| 
¡  |	jd ur| 	| jd| ¡  |	¡ qx| ¡ }|d t|ƒt|ƒ … }| 	|||	¡ qxt|
ƒdkr²| 
¡  q$| jrº| ¡  | |¡}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  s^    ÿ€
ÿ€

ÿzHeader.encodec                 C   sx   g }d }g }| j D ]!\}}||kr| |¡ q	|d ur%| t |¡|f¡ |g}|}q	|r7| 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   ª  ó   
z_ValueFormatter.__str__c                 C   sv   | j  ¡ }|dkr| j j|Ž  t| j ƒdkr4| j  ¡ r+| jr+| 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   ¸  ó   z_ValueFormatter.add_transitionc                 C   sÀ   |j d u r|  ||| j¡ d S | ||  ¡ ¡}z| d¡}W n
 ty(   Y d S w |d ur3|  ||¡ z| ¡ }W n
 tyC   Y d S w |  ¡  | j	 
| j|¡ |D ]}| j | j| ¡ qRd 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rZ   )rv   r(   r{   rw   r~   r   r   r   r†   à  s
   €ÿz_ValueFormatter._maxlengthsc                 C   sf   t  dt d || ¡}|d rdg|d d…< n| d¡ tt|ƒgd Ž D ]
\}}|  ||¡ q&d 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 ]:}t| j  ¡ d ddƒD ]*}| ¡ r6| j | d }|r6|d |kr6 n| j |d  d }|rI|d |krI nqq n| j  ¡ \}}| j j	dkrb|  
¡  |sbd}| j  ||¡ d S | j  |¡}| j t| j ƒ¡ | j  |¡ d S 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ˆ   ü  s2   
€ä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€   #  rƒ   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  s   €" 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  r   z_Accumulator.part_count)r   rZ   )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>   sB   
ø

_
ÿ k 