U &.e @sfdZddlmZmZmZddlmZddlZddlZddl Z ddl m Z ddl mZddlZddlZddlZddd d d d d dddddg ZdadaddZddZddZddZeadadejdddfdd Zd0d d Zd!d"Zd#d ZGd$ddZ Gd%ddZ!ejfd&d Z"d1d'd Z#ejfd(dZ$d)dZ%d*dZ&d+dZ'd,dZ(d-d.Z)e*d/krbe"dS)2z2.6)StringIOBytesIO TextIOWrapper)MappingN) FeedParser)MessageMiniFieldStorage FieldStorageparseparse_multipart parse_headertestprint_exception print_environ print_formprint_directoryprint_argumentsprint_environ_usagecGsFtr,ts,zttdaWntk r*YnXts6tantat|dS)Na)logfilelogfpopenOSErrornologlogdologZallargsr/usr/lib64/python3.8/cgi.pyinitlog8sr cGst||ddS)N )rwrite)Zfmtargsrrrr[srcGsdSNrrrrrr_srcCsdatrtdatadS)Nr)rrcloser rrrrrcloselogcs r&c Cs^|dkrtj}t|dr |j}nd}t|tr4|j}d|krDd|d<|ddkr t|d\}}|dkrxt|||dS|d krt |d }t r|t krt d | | |} nd } d |kr| r| d} | |d } n*tjddr| r| d} | tjd} | |d <nsz#parse_multipart..)r<formatrZset_typeKeyErrorr )r?rDr'rKr,rHrCrJrrOrr s   ccs|dddkr|dd}|d}|dkr`|dd||dd|dr`|d|d}q&|dkrpt|}|d|}|V||d}qdS)Nr2;r"\")findcountlenstrip)sendfrrr _parseparams  (  r^cCstd|}|}i}|D]}|d}|dkr|d|}||dd}t|dkr|d|dkrdkrnn |dd}|dd d d}|||<q||fS) NrS=rr2rVrTz\\\rU)r^__next__rWrZlowerrYrG)linepartskeyrDpinamevaluerrrr s  ,  c@s<eZdZdZdZdZdZiZdZiZ iZ ddZ ddZ dS)rNcCs||_||_dSr$rirjselfrirjrrr__init__ szMiniFieldStorage.__init__cCsd|j|jfS)NzMiniFieldStorage(%r, %r)rkrmrrr__repr__szMiniFieldStorage.__repr__) __name__ __module__ __qualname__filenamelisttypefile type_options dispositiondisposition_optionsrJrnrprrrrrsc @seZdZdddejdddddddf ddZdd Zd d Zd d ZddZ ddZ ddZ ddZ d9ddZ d:ddZddZddZddZd d!Zd"d#Zd$d%ZdZd&d'Zd(d)Zd*Zd+d,Zd-d.Zd/d0Zd1d2Zd3d4Zd5d6Zd7d8ZdS);r NrrFrGc CsZd} ||_||_| |_| |_d|kr0|d} d|_| dksF| dkrd|krX|d} ntjddrrtjd} nd} | t d} t | }|dkrdd i}|dkri}| d krd |d<d |kr|d |d<d|kr|d|_d |kr|d |d <nt |t tfstd||_|dkr*tjj|_nsz)FieldStorage.getvalue..r6rurjrmrfdefaultrjrrrgetvalues  zFieldStorage.getvaluecCs4||kr,||}t|tr$|djS|jSn|SdSNrrrrrrgetfirsts   zFieldStorage.getfirstcCs:||kr2||}t|tr(dd|DS|jgSngSdS)NcSsg|] }|jqSrrrrrrr.sz(FieldStorage.getlist..r)rmrfrjrrrrL)s   zFieldStorage.getlistcCs*|jdkrtdttdd|jDS)Nrcss|] }|jVqdSr$rirMrrrr 8sz$FieldStorage.keys..)rursetrorrrr4s zFieldStorage.keyscs*|jdkrtdtfdd|jDS)Nrc3s|]}|jkVqdSr$rrrfrrr>sz,FieldStorage.__contains__..)rurany)rmrfrrr __contains__:s zFieldStorage.__contains__cCs t|Sr$)rYrrorrr__len__@szFieldStorage.__len__cCs|jdkrtdt|jS)NzCannot be converted to bool.)rurboolrorrr__bool__Ds zFieldStorage.__bool__c Cs|j|j}t|ts0td|jt|jf||j |j }|j rT|d|j 7}t j j||j|j|j |j |j|jd}dd|D|_|dS)N%s should return bytes, got %sr1r'rKrr,cSsg|]\}}t||qSrrrMrfrjrrrrVsz0FieldStorage.read_urlencoded..)r?r;rr6rr:rvrqr<r'rKrr>r parse_qslrArBrr,ru skip_lines)rmrEqueryrrrrIs& zFieldStorage.read_urlencodedc CsL|j}t|std|fg|_|jrftjj|j|j|j |j |j |j |j d}|jdd|D|jpp|j}|j}t|tstd|jt|jf|jt|7_|d|jkr|r|j}|jt|7_q|j }|dk r|t|j8}t} d} |j} | | 7} | s q0q | s:q@|jt| 7_| | |j |j | } d| krz| d=|jdkrdn |j|j} ||j| ||||| |j |j ||j }|dk r|d 8}|jr|t|j8}|d krtd |j|j7_|j||j s@|j|j!kr4d krnnq@q|"dS) Nz&Invalid boundary in multipart form: %rrcss|]\}}t||VqdSr$rrrrrrfsz*FieldStorage.read_multi..r--r{r}r2rzMax number of fields exceeded)#rvalid_boundaryr:rurr>r rrArBr'rKrr,extendFieldStorageClass __class__r?r~r6rrvrqrrYrZrZfeedr<r%rrrrr)rmr@rArBZibrklassZ first_linerparserZhdr_textdatarJrpartrrrr[s            (zFieldStorage.read_multicCs4|jdkr||n||jddSr)r read_binaryr read_linesrwrrorrrrs   zFieldStorage.read_singlei cCs||_|j}|dkr|dkr|jt||j}t|tsVt d|jt |j f|j t |7_ |std|_q|j||t |}qdS)Nrrr`) make_filerwrr?r;minbufsizer6rr:rvrqrrYrr")rmZtodorrrrrs   zFieldStorage.read_binarycCs@|jrt|_|_nt|_|_|jr4|n|dSr$)rrrw_FieldStorage__filerrread_lines_to_outerboundaryread_lines_to_eofrorrrrs  zFieldStorage.read_linescCsv|jdk rF|jt|dkrF||_|j}|j|d|_|jrZ|j|n|j||j |j dS)Ni) rtellrYrrwrr"rr<r'rK)rmrdrrrrZ__writes    zFieldStorage.__writecCs:|jd}|jt|7_|s*d|_q6||qdS)Nr`)r?r~rrYr_FieldStorage__write)rmrdrrrrs  zFieldStorage.read_lines_to_eofc CsJd|j}|d}d}d}d}|jdk rFd|jkr>|krFnnqF|jd}|jt|7_|t|7}|s~d|_qF|dkr||}d}|dr|r|}||krqF||krd|_qF|}| d rd }|dd }d}nL| d r d }|dd}d}n*| dr.d}|dd}d }nd}d }| ||qdS) Nrr{Trrr` r2s  F) rrr?r~rrYr startswithrstripendswithr) rm next_boundary last_boundaryZdelimlast_line_lfendZ_readrd strippedlineZodelimrrrrsN $        z(FieldStorage.read_lines_to_outerboundarycCs|jr |jrdSd|j}|d}d}|jd}|jt|7_|sPd|_q|dr|r|}||krpq||krd|_q|d}q&dS)NrTrr`r2r)rrr?r~rrYrrZ)rmrrrrdrrrrrs$   zFieldStorage.skip_linescCs&|jrtdStjd|jddSdS)Nzwb+zw+r!)r'newline)rtempfileZ TemporaryFiler'rorrrr(s  zFieldStorage.make_file)N)N) rqrrrsosr@rnrrrrprrrrrrLrrrrrrrrrrrrrrrrrrrrr sJ+ &   E   2cCstdttjt_zNt}ttt|t|t dd}|fdd}td|Wnt YnXtdda z&t}ttt|t|Wnt YnXdS) NzContent-type: text/htmlcSs tddS)Nz,testing print_exception() -- italics?)execrrrrr][sztest..fcSs |dSr$r)r]rrrg]sztest..gz9

What follows is a test, not an actual exception:

z*

Second try with a small maxlen...

2) printr3stdoutstderrr rrrrrrr9)r@formr]rrrrr Js4    c Csx|dkrt\}}}ddl}ttd||||||}tdtd|ddt|df~dS)Nrz+

Traceback (most recent call last):

z
%s%s
rr`) r3exc_info tracebackr format_tbformat_exception_onlyhtmlescapejoin)rvrjtbrrrurrrrqs   c Cs\t|}ttdtd|D]"}tdt|dt||q&tdtdS)Nz

Shell Environment:





)sortedrrrr)r@rrfrrrrs  cCst|}ttd|s&tdtd|D]Z}tdt|ddd||}tdttt|d td tt|q2td tdS) Nz

Form Contents:

z

No form fields.rr: )r\zzrr)rrrrrreprrv)rrrfrjrrrrs c Csjttdz t}Wn6tk rP}ztdtt|W5d}~XYnXtt|tdS)Nz#

Current Working Directory:

zOSError:)rrgetcwdrrrstr)pwdmsgrrrrs &cCs(ttdtttjtdS)Nz

Command Line Arguments:

)rr3r=rrrrrs  cCs tddS)Na

These environment variables could have been set:

  • AUTH_TYPE
  • CONTENT_LENGTH
  • CONTENT_TYPE
  • DATE_GMT
  • DATE_LOCAL
  • DOCUMENT_NAME
  • DOCUMENT_ROOT
  • DOCUMENT_URI
  • GATEWAY_INTERFACE
  • LAST_MODIFIED
  • PATH
  • PATH_INFO
  • PATH_TRANSLATED
  • QUERY_STRING
  • REMOTE_ADDR
  • REMOTE_HOST
  • REMOTE_IDENT
  • REMOTE_USER
  • REQUEST_METHOD
  • SCRIPT_NAME
  • SERVER_NAME
  • SERVER_PORT
  • SERVER_PROTOCOL
  • SERVER_ROOT
  • SERVER_SOFTWARE
In addition, HTTP headers sent by the server may be passed in the environment as well. Here are some common variable names:
  • HTTP_ACCEPT
  • HTTP_CONNECTION
  • HTTP_HOST
  • HTTP_PRAGMA
  • HTTP_REFERER
  • HTTP_USER_AGENT
)rrrrrrscCs(ddl}t|trd}nd}|||S)Nrs^[ -~]{0,200}[!-~]$z^[ -~]{0,200}[!-~]$)rer6rmatch)r[rZ _vb_patternrrrrs  r__main__)rFrGr1)NNNN)+ __version__iorrrZcollections.abcrr3rZ urllib.parser>Z email.parserrZ email.messagerrrr__all__rrr rrr&rr9r@r r r^r rr r rrrrrrrrqrrrrsf   #  F  :'   /