U ,a&^@sdddgZddlZddlZddlZddlZddlmZddlmZ e j Z dZ dZ d Z d Zd Zd Zd Ze dZe dZedejejBZedZedZejjZddZdddZGdddZGdddZGddde Z!dS)Header decode_header make_headerN)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 Cst|drdd|jDSt|s.|dfgSg}|D]}t|}d}|r:|d}|rj|}d}|r~||ddf|rL|d }|d }|d}||||fqLq:g} t |D]J\} } | dkr| dr|| ddr|| dd r| | dqt | D] } || =qg} |D]\}}}|dkrV| ||fn|d kr|t j|}| ||fn~|d krt|d }|r|d dd |7}zt j|}Wn tjk rtd YnX| ||fn td|q2g}d}}| D]v\}}t|tr,t|d}|dkr@|}|}nB||krb|||f|}|}n |dkrz|t|7}n||7}q|||f|S)N_chunkscSs(g|] \}}t|t|t|fqS)_charsetZ_encodestr).0stringrrr1/opt/alt/python38/lib64/python3.8/email/header.py Msz!decode_header..TrFqbz===zBase64 decoding errorzUnexpected encoding: zraw-unicode-escape)hasattrr ecresearch splitlinessplitpoplstripappendlower enumerateisspacereversedemail quoprimimeZ header_decodelenZ base64mimedecodebinasciiErrorrAssertionError isinstancerbytesBSPACE)headerZwordslinepartsfirstZ unencodedrencodingZencodedZdroplistnwdZ decoded_wordsZencoded_stringZwordZpaderrZ collapsedZ last_word last_charsetrrrr=s|       4              cCsFt|||d}|D].\}}|dk r4t|ts4t|}|||q|S)N) maxlinelen header_namecontinuation_ws)rr-Charsetr!)Z decoded_seqr9r:r;hsrrrrrs  c@sJeZdZdddZddZdd Zdd d Zd d ZdddZddZ dS)rNrstrictcCs||dkrt}nt|ts t|}||_||_g|_|dk rH|||||dkrTt}||_|dkrjd|_ nt |d|_ dS)Nrr) USASCIIr-r<r_continuation_wsr r! MAXLINELEN _maxlinelen _headerlenr()selfr>rr9r:r;errorsrrr__init__s zHeader.__init__c Cs|g}d}d}|jD]\}}|}|tjkrH|dd}|dd}|r|o\||d}|dkr|dkr|s|td}n|dkr|s|t|o||d}|}||qt |S)NasciisurrogateescapereplacerNr ) _normalizer r UNKNOWN8BITencoder) _nonctextr!SPACE EMPTYSTRINGjoin) rEZuchunkslastcs lastspacerrZnextcsZoriginal_byteshasspacerrr__str__s*        zHeader.__str__cCs |t|kSN)r)rEotherrrr__eq__sz Header.__eq__cCs|dkr|j}nt|ts"t|}t|tsZ|jp4d}|tjkrN|dd}n |||}|jpbd}|tjkrz|||Wn"t k r|dkrt }YnX|j ||fdS)Nr rI) rr-r<rZ input_codecrNr)Z output_codecrOUnicodeEncodeErrorUTF8r r!)rEr>rrFZ input_charsetZoutput_charsetrrrr! s$        z Header.appendcCs|p|dkS)N)()\)r$)rEr>rrrrP4szHeader._nonctext;, rcCs||dkr|j}|dkr"d}t|j||j|}d}d}}|jD]\}} |dk r|oh||d}|dkr|r~| dkr|n| dkr|s||o||d}| }d}|} | r| d| d| n| dd| | ddD]`} | | j dk r"| |jd| | q| } | dt | t | } | | | | qt | dkrF| qF|jrx|||}t|rtd ||S) Nri@BrKrLFr rrz8header value appears to contain an embedded header: {!r})rMrC_ValueFormatterrDrAr rPadd_transitionrfeednewlineheader_encodingr r(_str_embedded_headerrrformat)rE splitcharsr9linesepZ formatterrTrVrUrrlinesr1ZslinefwsvaluerrrrO9sZ!        z Header.encodecCsxg}d}g}|jD]B\}}||kr.||q|dk rJ|t||f|g}|}q|rn|t||f||_dSrX)r r!rQrS)rEZchunksr8Z last_chunkrrrrrrMs zHeader._normalize)NNNNrr?)Nr?)r`Nr) __name__ __module__ __qualname__rGrWrZr!rPrOrMrrrrrs /  + Pc@sTeZdZddZddZddZddZd d Zd d Zd dZ ddZ ddZ dS)racCs0||_||_t||_||_g|_t||_dSrX)_maxlenrAr(_continuation_ws_len _splitchars_lines _Accumulator _current_line)rEZ headerlenmaxlenr;rirrrrGs  z_ValueFormatter.__init__cCs|||jSrX)rdrSrt)rErjrrrrfsz_ValueFormatter._strcCs |tSrX)rfNLrErrrrWsz_ValueFormatter.__str__cCsv|j}|dkr|jj|t|jdkrh|jrV|jrV|jdt|j7<n|jt|j|jdS)N)rr rrL) rvrpushr( is_onlywsrtrr!reset)rEZ end_of_linerrrrds  z_ValueFormatter.newlinecCs|jdddS)Nrr )rvrzryrrrrbsz_ValueFormatter.add_transitioncCs|jdkr||||jdS|||}z|d}Wntk rRYdSX|dk rh|||z |}Wntk rYdSX||j |j ||D]}|j |j |qdSNr)re _ascii_splitrsZheader_encode_lines _maxlengthsr IndexError _append_chunkrdrvrzrArtr!)rErlrrZ encoded_linesZ first_line last_liner1rrrrcs$   z_ValueFormatter.feedccs&|jt|jV|j|jVqdSrX)rqr(rvrrryrrrrsz_ValueFormatter._maxlengthscCsftdtd||}|dr0dg|dd<n |dtt|gdD]\}}|||qLdS)Nz([z]+)rr r)rerFWSrzipiterr)rErlrrir2partrrrr~s  z_ValueFormatter._ascii_splitcCs|j||t|j|jkr|jD]v}t|jdddD]T}|rn|j|d}|rn|d|krnq|j|dd}|r@|d|kr@qq@q&qq&|j\}}|jj dkr| |sd}|j||dS|j |}|j t|j|j|dS)NrrrLr)rvrzr(rqrsrange part_countr$r _initial_sizerdpop_fromrtr!rr|)rErlrZchiZprevpartrZ remainderrrrrs.   z_ValueFormatter._append_chunkN) rnrorprGrfrWrdrbrcrr~rrrrrras %racsjeZdZdfdd ZddZdddZfdd Zd d Zd d ZdddZ ddZ fddZ Z S)rurcs||_tdSrX)rsuperrG)rEZ initial_size __class__rrrGsz_Accumulator.__init__cCs|||fdSrX)r!)rErlrrrrrz#sz_Accumulator.pushcCs||d}g||d<|SrXr)rErZpoppedrrrr&s  z_Accumulator.pop_fromcs|dkrdStS)Nr)r r )rrrryrrrr+s z_Accumulator.popcCstdd|D|jS)Ncss"|]\}}t|t|VqdSrX)r(rrlrrrr 1sz'_Accumulator.__len__..)sumrryrrr__len__0sz_Accumulator.__len__cCstdd|DS)Ncss |]\}}t||fVqdSrXrRrSrrrrr5sz'_Accumulator.__str__..rryrrrrW4s z_Accumulator.__str__NcCs"|dkr g}||dd<d|_dSr})r)rEZstartvalrrrr|8s z_Accumulator.resetcCs|jdko| pt|Sr})rrr$ryrrrr{>sz_Accumulator.is_onlywscs tSrX)rrryrrrrAsz_Accumulator.part_count)r)r)N) rnrorprGrzrrrrWr|r{r __classcell__rrrrrus   ru)NNr)"__all__rr*Zemail.quoprimimer&Zemail.base64mimeZ email.errorsrrrr<rxrQr/ZSPACE8rRrBrr@r\compileVERBOSE MULTILINErZfcrergr'Z _max_appendrrrralistrurrrrsD     _ k