a 8êdg&^ã@sägd¢ZddlZddlZddlZddlZddlmZddlmZ e j Z dZ dZ dZ dZd Zd Zd Ze d ƒZe d ƒZe dejejB¡Ze d¡Ze d¡ZejjZdd„Zddd„ZGdd„dƒZGdd„dƒZGdd„de ƒZ!dS))ÚHeaderÚ decode_headerÚ make_headeréN)ÚHeaderParseError)ÚcharsetÚ ú ó z ÚéNz úus-asciizutf-8ai =\? # literal =? (?P[^?]*?) # non-greedy up to the next ? is the charset \? # literal ? (?P[qQbB]) # either a "q" or a "b", case insensitive \? # literal ? (?P.*?) # non-greedy up to the next ?= is the encoded string \?= # literal ?= z[\041-\176]+:$z \n[^ \t]+:c Cs–t|dƒrdd„|jDƒSt |¡s.|dfgSg}| ¡D]€}t |¡}d}|r:| d¡}|rj| ¡}d}|r~| |ddf¡|rL| d¡  ¡}| d¡  ¡}| d¡}| |||f¡qLq:g} t |ƒD]J\} } | dkrÈ| drÈ|| ddrÈ|| dd  ¡rÈ|  | d¡qÈt | ƒD] } || =qg} |D]È\}}}|durV|  ||f¡n¢|d kr|t j |¡}|  ||f¡n||d krìt|ƒd }|r¬|d dd |…7}zt j |¡}WntjyÚtd ƒ‚Yn0|  ||f¡n td|ƒ‚q2g}d}}| D]v\}}t|tƒr*t|dƒ}|dur>|}|}nB||kr`| ||f¡|}|}n |durx|t|7}n||7}q | ||f¡|S)NÚ_chunkscSs(g|] \}}t |t|ƒ¡t|ƒf‘qS©)Ú_charsetZ_encodeÚstr)Ú.0Ústringrrrú(/usr/local/lib/python3.9/email/header.pyÚ Msÿz!decode_header..TrFééÚqÚbéz===zBase64 decoding errorzUnexpected encoding: zraw-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ÚencodedZdroplistÚnÚwÚdZ decoded_wordsZencoded_stringZwordZpaderrZ collapsedZ last_wordÚ last_charsetrrrr=s| ÿ      4              rcCsFt|||d}|D].\}}|dur4t|tƒs4t|ƒ}| ||¡q|S)N)Ú maxlinelenÚ header_nameÚcontinuation_ws)rr-ÚCharsetr!)Z decoded_seqr;r<r=ÚhÚsrrrrrœs ÿ rc@sJeZdZddd„Zdd„Zdd „Zdd d „Zd d „Zddd„Zdd„Z dS)rNrÚstrictcCs||durt}nt|tƒs t|ƒ}||_||_g|_|durH| |||¡|durTt}||_|durjd|_ nt |ƒd|_ dS)Nrr) ÚUSASCIIr-r>rÚ_continuation_wsr r!Ú MAXLINELENÚ _maxlinelenÚ _headerlenr()Úselfr@rr;r<r=ÚerrorsrrrÚ__init__´s zHeader.__init__c CsÄ| ¡g}d}d}|jD]ž\}}|}|tjkrH| dd¡}| dd¡}|r˜|o\| |d¡}|dvr‚|dvr˜|s˜| t¡d}n|dvr˜|s˜| t¡|o¨| |d¡}|}| |¡qt   |¡S)NÚasciiÚsurrogateescapeÚreplacer©Nr éÿÿÿÿ) Ú _normalizer rÚ UNKNOWN8BITÚencoder)Ú _nonctextr!ÚSPACEÚ EMPTYSTRINGÚjoin) rGZuchunksÚlastcsÚ lastspacerrZnextcsZoriginal_bytesÚhasspacerrrÚ__str__ãs*        zHeader.__str__cCs |t|ƒkS©N)r)rGÚotherrrrÚ__eq__sz Header.__eq__cCs´|dur|j}nt|tƒs"t|ƒ}t|tƒsZ|jp4d}|tjkrN| dd¡}n | ||¡}|jpbd}|tjkr z| ||¡Wn t yž|dkr–‚t }Yn0|j   ||f¡dS)Nr rK) rr-r>rZ input_codecrPr)Z output_codecrQÚUnicodeEncodeErrorÚUTF8r r!)rGr@rrHZ input_charsetÚoutput_charsetrrrr! s$         z Header.appendcCs| ¡p|dvS)N)ú(ú)ú\)r$)rGr@rrrrR4szHeader._nonctextú;, rcCs | ¡|dur|j}|dkr"d}t|j||j|ƒ}d}d}}|jD]\}} |durœ|oh| |d¡}|dvrˆ|r~| dvrœ| ¡n| dvrœ|sœ| ¡|o¬| |d¡}| }d}| ¡} | rÖ|  d| d| ¡n|  dd| ¡| dd…D]`} |  ¡| j dur"|  |jd|   ¡| ¡qð|   ¡} | dt | ƒt | ƒ…} |  | | | ¡qðt | ƒdkrF|  ¡qF|jrx| ¡| |¡}t |¡rœtd  |¡ƒ‚|S) Nri@BrMrNFr rrz8header value appears to contain an embedded header: {!r})rOrEÚ_ValueFormatterrFrCr rRÚadd_transitionrÚfeedÚnewlineÚheader_encodingr r(Ú_strÚ_embedded_headerrrÚformat)rGÚ splitcharsr;ÚlinesepÚ formatterrVrXrWrrÚlinesr2ZslineÚfwsÚvaluerrrrQ9sX!ÿ    ÿ    ÿz Header.encodecCsxg}d}g}|jD]B\}}||kr.| |¡q|durJ| t |¡|f¡|g}|}q|rn| t |¡|f¡||_dSrZ)r r!rSrU)rGÚchunksr:Z last_chunkrrrrrrO‰s zHeader._normalize)NNNNrrA)NrA)rcNr) Ú__name__Ú __module__Ú __qualname__rIrYr\r!rRrQrOrrrrr³sþ /  + Prc@sTeZdZdd„Zdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dd„Z dS)rdcCs0||_||_t|ƒ|_||_g|_t|ƒ|_dSrZ)Ú_maxlenrCr(Ú_continuation_ws_lenÚ _splitcharsÚ_linesÚ _AccumulatorÚ _current_line)rGZ headerlenÚmaxlenr=rlrrrrIžs  z_ValueFormatter.__init__cCs| ¡| |j¡SrZ)rgrUry)rGrmrrrri¦sz_ValueFormatter._strcCs | t¡SrZ)riÚNL©rGrrrrYªsz_ValueFormatter.__str__cCsv|j ¡}|dkr|jj|Žt|jƒdkrh|j ¡rV|jrV|jdt|jƒ7<n|j t|jƒ¡|j ¡dS)N)rr rrN) r{rÚpushr(Ú is_onlywsryrr!Úreset)rGZ end_of_linerrrrg­s  z_ValueFormatter.newlinecCs|j dd¡dS)Nrr )r{rr~rrrre¸sz_ValueFormatter.add_transitioncCsÀ|jdur| |||j¡dS| || ¡¡}z| d¡}WntyPYdS0|durf| ||¡z | ¡}Wnty†YdS0| ¡|j   |j |¡|D]}|j   |j |¡q¤dS©Nr)rhÚ _ascii_splitrxZheader_encode_linesÚ _maxlengthsrÚ IndexErrorÚ _append_chunkrgr{rrCryr!)rGrprrZ encoded_linesZ first_lineÚ last_liner2rrrrf»s$     z_ValueFormatter.feedccs&|jt|jƒV|j|jVqdSrZ)rvr(r{rwr~rrrr„àsz_ValueFormatter._maxlengthscCsft dtd||¡}|dr0dg|dd…<n | d¡tt|ƒgdŽD]\}}| ||¡qLdS)Nz([z]+)rr r)ÚrerÚFWSrÚzipÚiterr†)rGrprrlr3Úpartrrrrƒæs  z_ValueFormatter._ascii_splitcCs|j ||¡t|jƒ|jkr|jD]v}t|j ¡dddƒD]T}| ¡rn|j|d}|rn|d|krnq˜|j|dd}|r@|d|kr@q˜q@q&qÚq&|j ¡\}}|jj dkrÈ|  ¡|sÈd}|j ||¡dS|j  |¡}|j   t|jƒ¡|j |¡dS)NrrrNr)r{rr(rvrxÚrangeÚ part_countr$rÚ _initial_sizergÚpop_fromryr!rr)rGrprZchÚiZprevpartrŒÚ remainderrrrr†üs.   z_ValueFormatter._append_chunkN) rsrtrurIrirYrgrerfr„rƒr†rrrrrds %rdcsjeZdZd‡fdd„ Zdd„Zddd„Z‡fdd „Zd d „Zd d „Zddd„Z dd„Z ‡fdd„Z ‡Z S)rzrcs||_tƒ ¡dSrZ)rÚsuperrI)rGZ initial_size©Ú __class__rrrIsz_Accumulator.__init__cCs| ||f¡dSrZ)r!)rGrprrrrr#sz_Accumulator.pushcCs||d…}g||d…<|SrZr)rGr‘Zpoppedrrrr&s  z_Accumulator.pop_fromcs| ¡dkrdStƒ ¡S)Nr)r r )rŽr“rr~r”rrr+s z_Accumulator.popcCstdd„|Dƒ|jƒS)Ncss"|]\}}t|ƒt|ƒVqdSrZ)r(©rrprŒrrrÚ 1óz'_Accumulator.__len__..)Úsumrr~rrrÚ__len__0sÿz_Accumulator.__len__cCst dd„|Dƒ¡S)Ncss |]\}}t ||f¡VqdSrZ©rTrUr–rrrr—5sÿz'_Accumulator.__str__..r›r~rrrrY4s ÿz_Accumulator.__str__NcCs"|dur g}||dd…<d|_dSr‚)r)rGZstartvalrrrr8s z_Accumulator.resetcCs|jdko| pt|ƒ ¡Sr‚)rrr$r~rrrr€>sz_Accumulator.is_onlywscs tƒ ¡SrZ)r“ršr~r”rrrŽAsz_Accumulator.part_count)r)r)N) rsrtrurIrrrršrYrr€rŽÚ __classcell__rrr”rrzs   rz)NNr)"Ú__all__rˆr*Zemail.quoprimimer&Zemail.base64mimeZ email.errorsrrrr>r}rSr/ZSPACE8rTrDr‰rBr^ÚcompileÚVERBOSEÚ MULTILINErZfcrerjr'Z _max_appendrrrrdÚlistrzrrrrÚs>   ø  _ÿ k