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/local/python38/lib/python3.8/cgi.pyinitlog8sr cGst||ddS)N )rwrite)fmtargsrrrr[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@rEr)rLr.rIrDrKrrPrr s   ccs|dddkr|dd}|d}|dkr`|dd||dd|dr`|d|d}q&|dkrpt|}|d|}|V||d}qdS)Nr3;r"\")findcountlenstrip)sendfrrr _parseparams  (  r`cCstd|}|}i}|D]}|d}|dkr|d|}||dd}t|dkr|d|dkrdkrnn |dd}|dd d d}|||<q||fS) NrU=rr3rXrVz\\\rW)r`__next__rYr\lowerr[rH)linepartskeyrEpinamevaluerrrr s  ,  c@s<eZdZdZdZdZdZiZdZiZ iZ ddZ ddZ dS)rNcCs||_||_dSr%rkrlselfrkrlrrr__init__ szMiniFieldStorage.__init__cCsd|j|jfS)NzMiniFieldStorage(%r, %r)rmrorrr__repr__szMiniFieldStorage.__repr__) __name__ __module__ __qualname__filenamelisttypefile type_options dispositiondisposition_optionsrKrprrrrrrrsc @seZdZdddejdddddddf ddZd d Zd d Zd dZddZ ddZ ddZ ddZ d:ddZ d;ddZddZddZdd Zd!d"Zd#d$Zd%d&ZdZd'd(Zd)d*Zd+Zd,d-Zd.d/Zd0d1Zd2d3Zd4d5Zd6d7Zd8d9ZdS)encodelocalegetpreferredencodingrr7rr TypeErrorrKr5r8r@rr6r)rLbytesrxrs outerboundary bytes_readlimitr r{r|rkrv _binary_filerz innerboundaryr9r;r:lengthrwrydoneread_urlencoded read_multi read_single)ror@rKrrArBrCrr)rLrr.methodrFZcdisprErDZclenrrrrp?s/                          zFieldStorage.__init__cCs(z|jWntk r"YnXdSr%)ryr&AttributeErrorrqrrr__del__szFieldStorage.__del__cCs|Sr%rrqrrr __enter__szFieldStorage.__enter__cGs|jdSr%)ryr&)ror$rrr__exit__szFieldStorage.__exit__cCsd|j|j|jfS)NzFieldStorage(%r, %r, %r))rkrvrlrqrrrrrs zFieldStorage.__repr__cCs t|Sr%)iterkeysrqrrr__iter__szFieldStorage.__iter__cCsT|dkrt||jr:|jd|j}|jdn|jdk rL|j}nd}|S)Nrlr)rryseekr<rwrnrrr __getattr__s   zFieldStorage.__getattr__cCs^|jdkrtdg}|jD]}|j|kr||q|sBt|t|dkrV|dS|SdS)N not indexabler3r)rwrrkappendrTr[)rorhfounditemrrr __getitem__s    zFieldStorage.__getitem__cCs8||kr0||}t|tr(dd|DS|jSn|SdS)NcSsg|] }|jqSrrlrNxrrr sz)FieldStorage.getvalue..r7rwrlrorhdefaultrlrrrgetvalues  zFieldStorage.getvaluecCs4||kr,||}t|tr$|djS|jSn|SdSNrrrrrrgetfirsts   zFieldStorage.getfirstcCs:||kr2||}t|tr(dd|DS|jgSngSdS)NcSsg|] }|jqSrrrrrrr.sz(FieldStorage.getlist..r)rorhrlrrrrM)s   zFieldStorage.getlistcCs*|jdkrtdttdd|jDS)Nrcss|] }|jVqdSr%rkrNrrrr 8sz$FieldStorage.keys..)rwrsetrqrrrr4s zFieldStorage.keyscs*|jdkrtdtfdd|jDS)Nrc3s|]}|jkVqdSr%rrrhrrr>sz,FieldStorage.__contains__..)rwrany)rorhrrr __contains__:s zFieldStorage.__contains__cCs t|Sr%)r[rrqrrr__len__@szFieldStorage.__len__cCs|jdkrtdt|jS)NzCannot be converted to bool.)rwrboolrqrrr__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 %sr(r)rLrr.cSsg|]\}}t||qSrrrNrhrlrrrrVsz0FieldStorage.read_urlencoded..)r@r<rr7rr;rxrsr=r)rLrr?r parse_qslrBrCrr.rw skip_lines)rorFqueryrrrrIs& 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}rr3rzMax number of fields exceeded)#rvalid_boundaryr;rwrr?r rrBrCr)rLrr.extendFieldStorageClass __class__r@rr7rrxrsrr[r\rZfeedr=r&rrrrr)rorArBrCZibrklassZ first_linerparserZhdr_textdatarKrpartrrrr[s            (zFieldStorage.read_multicCs4|jdkr||n||jddSr)r read_binaryr read_linesryrrqrrrrs   zFieldStorage.read_singlei cCs||_|j}|dkr|dkr|jt||j}t|tsVt d|jt |j f|j t |7_ |std|_q|j||t |}qdS)Nrrrb) make_fileryrr@r<minbufsizer7rr;rxrsrr[rr")roZtodorrrrrs   zFieldStorage.read_binarycCs@|jrt|_|_nt|_|_|jr4|n|dSr%)rrry_FieldStorage__filerrread_lines_to_outerboundaryread_lines_to_eofrqrrrrs  zFieldStorage.read_linescCsv|jdk rF|jt|dkrF||_|j}|j|d|_|jrZ|j|n|j||j |j dS)Ni) rtellr[rryrr"rr=r)rL)rorfrrrrZ__writes    zFieldStorage.__writecCs:|jd}|jt|7_|s*d|_q6||qdS)Nrb)r@rrr[r_FieldStorage__write)rorfrrrrs  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}Trrrb r3s  F) rrr@rrr[r startswithrstripendswithr) ro next_boundary last_boundarydelimlast_line_lfend_readrf 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)NrTrrbr3r)rrr@rrr[rr\)rorrrrfrrrrrs$   zFieldStorage.skip_linescCs&|jrtdStjd|jddSdS)Nzwb+zw+r!)r)newline)rtempfile TemporaryFiler)rqrrrr(s  zFieldStorage.make_file)N)N) rsrtruosrArprrrrrrrrrrrMrrrrrrrrrrrrrrrrrrrrr 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) printr4stdoutstderrr rrrrrrr:)rAformr_rrrrr Js4    c Csx|dkrt\}}}ddl}ttd||||||}tdtd|ddt|df~dS)Nrz+

Traceback (most recent call last):

z
%s%s
rrb) r4exc_info tracebackr format_tbformat_exception_onlyhtmlescapejoin)rxrltbrrrwrrrrqs   c Cs\t|}ttdtd|D]"}tdt|dt||q&tdtdS)Nz

Shell Environment:





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

Form Contents:

z

No form fields.rr: )r^zzrr)rrrrrreprrx)rrrhrlrrrrs c Csjttdz t}Wn6tk rP}ztdtt|W5d}~XYnXtt|tdS)Nz#

Current Working Directory:

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

Command Line Arguments:

)rr4r>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}[!-~]$)rer7rmatch)r]rZ _vb_patternrrrrs  r__main__)rGrHr()NNNN)+ __version__iorrrcollections.abcrr4rZ urllib.parser?Z email.parserrZ email.messagerrrr__all__rrr rrr'rr:rAr r r`r rr r rrrrrrrrsrrrrsf   #  F  :'   /