
    kj                     Z   d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ  e j                  e      Z	 ej                  d      Z ej                  d      Z ej                  d      Zej                  d   Z e ej"                  e            Zd	eez  d
efdZd	eez  d
efdZded
dfdZy)    N)Message)Request)Responses   ^[!#$%&'*+\-.^_`|~0-9a-zA-Z]+$s   ^(?:0|[1-9][0-9]*)$z^(?:0|[1-9][0-9]*)$)chunkedcompress,chunkeddeflate,chunkedgzip,chunkedcompressdeflategzipidentityvaluereturnc                     t        | t              rt        t        j	                  |             }nt        t
        j	                  |             }|st        d|       t        |       S )zLParse a content-length header value, or raise a ValueError if it is invalid.zinvalid content-length header: )
isinstancestrbool_valid_content_length_strmatch_valid_content_length
ValueErrorint)r   valids     d/home/ubuntu/.cache/pipx/cdb5059130eadca/lib/python3.12/site-packages/mitmproxy/net/http/validate.pyparse_content_lengthr   '   sX    %.44U;<*0078:5)DEEu:    c                 2   | j                         st        d|       t        | t              r| }n| j	                         }|j                         }t        j                  dd|      }|t        vrt        d|       t        j                  t        |      S )zZParse a transfer-encoding header value, or raise a ValueError if it is invalid or unknown.z"invalid transfer-encoding header: z[\t ]*,[\t ]*,z"unknown transfer-encoding header: )isasciir   r   r   decodelowerresub_HTTP_1_1_TRANSFER_ENCODINGStypingcastTransferEncoding)r   tes     r   parse_transfer_encodingr)   2   s     ==?=eYGHH%\\^	B	 #r	*B	--=eYGHH;;',,r   messagec                    g }g }| j                   j                  D ]e  \  }}t        j                  |      st	        d|      |j                         xdk(  r |j                  |       Pdk(  sU|j                  |       g |r|rt	        d      |rt        |      dkD  rt	        d|      | j                  st	        d|d   d	| j                         t        | t              rDd
| j                  cxk  rdk  sn | j                  dk(  rt	        d|d   d| j                         t        |d         }|xxdk(  rnxdk(  rnxdk(  rnxdk(  rn n  yxxdk(  rnxdk(  rnxdk(  rnxdk(  rn n!  t        | t              r&t	        d|d      }t        j                   |       yy|r+t        |      dkD  rt	        d|      t#        |d          yy)z{
    Validate HTTP message headers to avoid request smuggling attacks.

    Raises a ValueError if they are malformed.
    zinvalid header name: s   transfer-encodings   content-lengthz>message with both transfer-encoding and content-length headers   z$multiple transfer-encoding headers: z"unexpected HTTP transfer-encoding r   z for d         z for response with status code r   r   r   r	   r
   r   r   r   z for requestz!multiple content-length headers: N)headersfields_valid_header_namer   r   r!   appendlen	is_http11http_versionr   r   status_coder)   r   r%   assert_neverr   )r*   r(   clnamer   	te_parsedothers          r   validate_headersr=   B   s    
B	B-- !e!''-4TH=>>jjl%		% "		% ! 
b L
 	
 
r7Q;CB6JKK   4RUIU7CWCWBXY 
 gx(7&&-#-1D1D1K4RUI=\]d]p]p\qr  ,BqE2	T/2CnT=i&:=gw/$<YMV  ##E* 0 
 r7Q;@GHHRU# 
r   )loggingr"   r%   mitmproxy.httpr   r   r   	getLogger__name__loggercompiler2   r   r   Literalr'   	frozensetget_argsr$   r   bytesr   r   r)   r=    r   r   <module>rI      s     	  " " #			8	$  RZZ BC "

#:; &BJJ'=>  >>	   )9I)JK e  -3; -3C - K$g K$$ K$r   