
    z%i^                        	 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j4                  j6                  Zd Z	 	 ddZ G d d      Z G d d      Z G d de       Z!y))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      rG| j                  D cg c]/  \  }}t        j                  |t	        |            t	        |      f1 c}}S t
        j                  |       s| d fgS g }| j                         D ]  }t
        j                  |      }d}|s|j                  d      }|r|j                         }d}|r|j                  |d d f       |rc|j                  d      j                         }|j                  d      j                         }|j                  d      }	|j                  |	||f       |r g }
t        |      D ]K  \  }}|dkD  s|d   s||dz
     d   s||dz
     d   j                         s8|
j                  |dz
         M t        |
      D ]  }||=  g }|D ]  \  }}}||j                  ||f       |dk(  r3t         j"                  j%                  |      }|j                  ||f       U|dk(  rOt'        |      d	z  }|r|d
d d	|z
   z  }	 t         j(                  j+                  |      }|j                  ||f       t3        d|z          g }d x}}|D ]Y  \  }}t5        |t              rt7        |d      }||}|})||k7  r|j                  ||f       |}|}F||t8        |z   z  }U||z  }[ |j                  ||f       |S c c}}w # t,        j.                  $ r t1        d      w xY w)N_chunksTr   F      qb   z===zBase64 decoding errorzUnexpected encoding: zraw-unicode-escape)hasattrr   _charset_encodestrecresearch
splitlinessplitpoplstripappendlower	enumerateisspacereversedemail
quoprimimeheader_decodelen
base64mimedecodebinasciiErrorr   AssertionError
isinstancebytesBSPACE)headerstringr   wordslinepartsfirst	unencodedencodingencodeddroplistnwddecoded_wordsencoded_stringwordpaderr	collapsed	last_wordlast_charsets                        @/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/email/header.pyr   r   ;   sS    vy!+1>>;' !!&#g,7WF ; 	; ;;v E!!# ;

4 		!I%,,.	it45))A,,,. 99Q<--/))A,gx9: ;" H%  !1Q31Q4E!A#JqMeAaCjm.C.C.EOOAaC ! h !H M-2 E)'  .'!:;_##11.AD  $1_(1,F%V"446''..~> $$dG_5 !88!CDD%E* I##I& gdC 34DI"L$i67I"L!$&II i./W;d >> @&'>??@s   4K&+K,,Lc                     	 t        |||      }| D ]4  \  }}|t        |t              st        |      }|j                  ||       6 |S )N)
maxlinelenheader_namecontinuation_ws)r   r-   Charsetr   )decoded_seqrF   rG   rH   hsr   s          rD   r   r      s[    	 	*+.	0A! 
7z'7'Cg&G	G	
 H    c                   B    e Zd Z	 	 	 d	dZd Zd Zd
dZd ZddZd Z	y)r   Nc                     	 |t         }nt        |t              st        |      }|| _        || _        g | _        || j                  |||       |t        }|| _        |d| _	        y t        |      dz   | _	        y )Nr   r   )USASCIIr-   rI   r   _continuation_wsr   r   
MAXLINELEN_maxlinelen
_headerlenr'   )selfrL   r   rF   rG   rH   errorss          rD   __init__zHeader.__init__   s    	4 ?GGW-g&G /=KK7F+#J%DO "+.2DOrM   c                    	 | j                          g }d }d }| j                  D ]  \  }}|}|t        j                  k(  r$|j	                  dd      }|j                  dd      }|rU|xr | j                  |d         }|dvr|dv r5|s3|j                  t               d }n|dvr|s|j                  t               |xr | j                  |d         }|}|j                  |        t        j                  |      S )Nasciisurrogateescapereplacer   Nr   )
_normalizer   r   UNKNOWN8BITencoder)   	_nonctextr   SPACEEMPTYSTRINGjoin)	rU   uchunkslastcs	lastspacer1   r   nextcsoriginal_byteshasspaces	            rD   __str__zHeader.__str__   s    4	#|| 	#OFG F---!'w8I!J'..w	B!?dnnVAY&?!33!33Hu-!%#55iNN5)=4>>&*#=IFNN6"+	#, ((rM   c                     |t        |       k(  S N)r   )rU   others     rD   __eq__zHeader.__eq__   s     D	!!rM   c                    	 || j                   }nt        |t              st        |      }t        |t              sH|j                  xs d}|t         j
                  k(  r|j                  dd      }n|j                  ||      }|j                  xs d}|t         j
                  k7  r	 |j                  ||       | j                  j                  ||f       y # t        $ r |dk7  r t        }Y 5w xY w)Nr   rZ   )r   r-   rI   r   input_codecr_   r)   output_codecr`   UnicodeEncodeErrorUTF8r   r   )rU   rL   r   rV   input_charsetoutput_charsets         rD   r   zHeader.append  s    	( ?mmGGW-g&G!S!#//=:M 4 44HHZ):;HH]F3 !--;X1110
 	QL)	 & !:-s   (C C0/C0c                 0    	 |j                         xs |dv S )N)()\)r"   )rU   rL   s     rD   ra   zHeader._nonctext0  s    	yy{3a#333rM   c                 0   	 | j                          || j                  }|dk(  rd}t        | j                  || j                  |      }d }d x}}| j
                  D ][  \  }}	|I|xr | j                  |d         }|dvr|r|	dvr'|j                          n|	dvr|s|j                          |xr | j                  |d         }|	}d}|j                         }
|
r|j                  d|
d   |	       n|j                  dd|	       |
dd  D ]  }|j                          |	j                  /|j                  | j                  d|j                         z   |	       N|j                         }|d t        |      t        |      z
   }|j                  |||	        t        |
      dkD  sL|j                          ^ | j
                  r|j                          |j                  |      }t        j!                  |      rt#        d	j%                  |            |S )
Nr   i@B r\   r]   Fr   r   r	   z8header value appears to contain an embedded header: {!r})r^   rS   _ValueFormatterrT   rQ   r   ra   add_transitionr   feednewlineheader_encodingr   r'   _str_embedded_headerr   r   format)rU   
splitcharsrF   linesep	formatterrf   rj   rg   r1   r   linesr3   slinefwsvalues                  rD   r`   zHeader.encode5  s   	@ 	))J ? J#DOOZ$($9$9:G	##9#|| 	$OFG#!?dnnVAY&?!33#w6H'H!002$66y,,.=4>>&*#=IFH%%'Er58W5r2w/ab	 8!!#**6NN4#8#8#:M#*, !KKME4D	#e* 45CNN3w78 5zA~!!#5	$6 <<$$&w'""5)" $++16%=: :rM   c                    g }d }g }| j                   D ]I  \  }}||k(  r|j                  |       |&|j                  t        j                  |      |f       |g}|}K |r&|j                  t        j                  |      |f       || _         y rm   )r   r   rb   rd   )rU   chunksrC   
last_chunkr1   r   s         rD   r^   zHeader._normalize  s     
#|| 	'OFG,&!!&)+MM5::j#9<"HI$X
&	' MM5::j1<@ArM   )NNNNr	   strict)Nr   )z;, 	Nr   )
__name__
__module____qualname__rW   rk   ro   r   ra   r`   r^    rM   rD   r   r      s3    '+.2-5-3^)@")*V4
N`rM   r   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)r|   c                 |    || _         || _        t        |      | _        || _        g | _        t        |      | _        y rm   )_maxlenrQ   r'   _continuation_ws_len_splitchars_lines_Accumulator_current_line)rU   	headerlenmaxlenrH   r   s        rD   rW   z_ValueFormatter.__init__  s:     /$'$8!%))4rM   c                 X    | j                          |j                  | j                        S rm   )r   rd   r   )rU   r   s     rD   r   z_ValueFormatter._str  s    ||DKK((rM   c                 ,    | j                  t              S rm   )r   NLrU   s    rD   rk   z_ValueFormatter.__str__  s    yy}rM   c                    | j                   j                         }|dk7  r | j                   j                  |  t        | j                         dkD  r| j                   j	                         r7| j
                  r+| j
                  dxx   t        | j                         z  cc<   n.| j
                  j                  t        | j                                | j                   j                          y )N)r	   r   r   r]   )	r   r   pushr'   	is_onlywsr   r   r   reset)rU   end_of_lines     rD   r   z_ValueFormatter.newline  s    ((,,.)##D##[1t!!"Q&!!++-$++B3t'9'9#::""3t'9'9#:;  "rM   c                 <    | j                   j                  dd       y )Nr	   r   )r   r   r   s    rD   r}   z_ValueFormatter.add_transition  s    R(rM   c                    |j                   | j                  ||| j                         y |j                  || j	                               }	 |j                  d      }|| j                  ||       	 |j                         }| j                          | j                  j                  | j                  |       |D ]*  }| j                  j                  | j                  |z          , y # t        $ r Y y w xY w# t        $ r Y y w xY wNr   )r   _ascii_splitr   header_encode_lines_maxlengthsr   
IndexError_append_chunkr   r   r   rQ   r   r   )rU   r   r1   r   encoded_lines
first_line	last_liner3   s           rD   r~   z_ValueFormatter.feed  s    ""*c64+;+;<  33FD<L<L<NO	&**1-J !sJ/	%))+I 	 5 5yA! 	=DKKt44t;<	=  		  		s$   C( 2C7 (	C43C47	DDc              #      K   | j                   t        | j                        z
   	 | j                   | j                  z
   wrm   )r   r'   r   r   r   s    rD   r   z_ValueFormatter._maxlengths  s=     llS!3!3444,,!:!::: s   AAc                     t        j                  dt        z   dz   ||z         }|d   rdg|d d n|j                  d       t	        t        |      gdz   D ]  \  }}| j                  ||        y )Nz([z]+)r   r   r   )rer   FWSr   zipiterr   )rU   r   r1   r   r4   parts         rD   r   z_ValueFormatter._ascii_split  sq     c%V48E"1IIIaLtE{mAo. 	*ICsD)	*rM   c                 :   | j                   j                  ||       t        | j                         | j                  kD  r\| j                  D ]  }t        | j                   j                         dz
  dd      D ]R  }|j                         r| j                   |   d   }|r
|d   |k(  r n%| j                   |dz
     d   }|sI|d   |k(  sR n  nh | j                   j                         \  }}| j                   j                  dkD  r| j                          |sd}| j                   j                  ||       y | j                   j                  |      }| j                  j                  t        | j                                | j                   j                  |       y y )Nr   r   r]   r	   )r   r   r'   r   r   range
part_countr"   r   _initial_sizer   pop_fromr   r   r   r   )rU   r   r1   chiprevpartr   	remainders           rD   r   z_ValueFormatter._append_chunk  sx   V,t!!"T\\1 && t11<<>q@!RH 	Azz|"003A63q62:!#11!A#6q9HHRL"$4	  !..224	T%%33a7LLN """''T2**33A6IKKs4#5#567$$Y/9 2rM   N)r   r   r   rW   r   rk   r   r}   r~   r   r   r   r   rM   rD   r|   r|     s0    5)	#)#=J;*,0rM   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   c                 0    || _         t        | 	          y rm   )r   superrW   )rU   initial_size	__class__s     rD   rW   z_Accumulator.__init__  s    )rM   c                 *    | j                  ||f       y rm   )r   )rU   r   r1   s      rD   r   z_Accumulator.push  s    S&M"rM   c                     | |d  }g | |d  |S rm   r   )rU   r   poppeds      rD   r   z_Accumulator.pop_from!  s    abQRrM   c                 H    | j                         dk(  ryt        | 	         S )Nr   )r   r   )r   r   r   rU   r   s    rD   r   z_Accumulator.pop&  s!    ??aw{}rM   c                 <    t        d | D        | j                        S )Nc              3   P   K   | ]  \  }}t        |      t        |      z      y wrm   )r'   .0r   r   s      rD   	<genexpr>z'_Accumulator.__len__.<locals>.<genexpr>,  s!     =93CHSY&=   $&)sumr   r   s    rD   __len__z_Accumulator.__len__+  s     ==%%' 	'rM   c                 :    t         j                  d | D              S )Nc              3   P   K   | ]  \  }}t         j                  ||f         y wrm   rc   rd   r   s      rD   r   z'_Accumulator.__str__.<locals>.<genexpr>0  s+      !7$-C "-!1!13+!> !7r   r   r   s    rD   rk   z_Accumulator.__str__/  s"     !715!7 8 	8rM   c                 $    |g }|| d d  d| _         y r   )r   )rU   startvals     rD   r   z_Accumulator.reset3  s    HQrM   c                 `    | j                   dk(  xr |  xs t        |       j                         S r   )r   r   r"   r   s    rD   r   z_Accumulator.is_onlyws9  s,    !!1$Jd(*Ic$i6G6G6IJrM   c                      t         |          S rm   )r   r   r   s    rD   r   z_Accumulator.part_count<  s    w  rM   )r   rm   )r   r   r   rW   r   r   r   r   rk   r   r   r   __classcell__)r   s   @rD   r   r     s6    #

'8K! !rM   r   )NNr	   )"__all__r   r*   email.quoprimimer$   email.base64mimeemail.errorsr   r   r   rI   r   rb   r/   SPACE8rc   rR   r   rP   rt   compileVERBOSE	MULTILINEr   fcrer   r%   _max_appendr   r   r   r|   listr   r   rM   rD   <module>r      s  
 2 
    ) %


			

*
w rzz  
zzBLL " rzz#$ 2::m,  **[| ;? #,f fR}0 }0@%!4 %!rM   