
    Yf                         d Z ddlZ e edd                     e eej        d                    z
  Z e edd                    Z G d d          Z G d d	          Z	dS )
zF
Helpers for URI and method injection tests.

@see: U{CVE-2019-12387}
    N   ascii   c                   *    e Zd ZdZd Zd Zd Zd ZdS )MethodInjectionTestsMixina9  
    A mixin that runs HTTP method injection tests.  Define
    L{MethodInjectionTestsMixin.attemptRequestWithMaliciousMethod} in
    a L{twisted.trial.unittest.SynchronousTestCase} subclass to test
    how HTTP client code behaves when presented with malicious HTTP
    methods.

    @see: U{CVE-2019-12387}
    c                     t                      )z
        Attempt to send a request with the given method.  This should
        synchronously raise a L{ValueError} if either is invalid.

        @param method: the method (e.g. C{GET })

        @param uri: the URI

        @type method:
        NotImplementedErrorselfmethods     S/var/www/html/env/lib/python3.11/site-packages/twisted/web/test/injectionhelpers.py!attemptRequestWithMaliciousMethodz;MethodInjectionTestsMixin.attemptRequestWithMaliciousMethod   s     "###    c                     |                      t                    5 }d}|                     |           ddd           n# 1 swxY w Y   |                     t	          |j                  d           dS )z
        Issuing a request with a method that contains a carriage
        return and line feed fails with a L{ValueError}.
        s   GET
X-Injected-Header: valueN^Invalid method)assertRaises
ValueErrorr   assertRegexstr	exception)r   cmr   s      r   test_methodWithCLRFRejectedz5MethodInjectionTestsMixin.test_methodWithCLRFRejected(   s    
 z** 	;b7F226:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	R\**,=>>>>>   ?AAc                     t           D ]}dt          |g          fz  }|                     t                    5 }|                     |           ddd           n# 1 swxY w Y   |                     t          |j                  d           dS )z
        Issuing a request with a method that contains unprintable
        ASCII characters fails with a L{ValueError}.
           GET%sNr   )UNPRINTABLE_ASCII	bytearrayr   r   r   r   r   r   r   cr   r   s       r   'test_methodWithUnprintableASCIIRejectedzAMethodInjectionTestsMixin.test_methodWithUnprintableASCIIRejected2   s    
 # 	C 	CAA3 11F"":.. ?"66v>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?S..0ABBBB		C 	C   AA	!A	c                     t           D ]}dt          |g          fz  }|                     t                    5 }|                     |           ddd           n# 1 swxY w Y   |                     t          |j                  d           dS )zx
        Issuing a request with a method that contains non-ASCII
        characters fails with a L{ValueError}.
        r   Nr   )NONASCIIr   r   r   r   r   r   r   r   s       r   test_methodWithNonASCIIRejectedz9MethodInjectionTestsMixin.test_methodWithNonASCIIRejected=   s    
  	C 	CAA3 11F"":.. ?"66v>>>? ? ? ? ? ? ? ? ? ? ? ? ? ? ?S..0ABBBB		C 	Cr"   N)__name__
__module____qualname____doc__r   r   r!   r%    r   r   r   r      sb         $ $ $? ? ?	C 	C 	C	C 	C 	C 	C 	Cr   r   c                   <    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	S )
URIInjectionTestsMixina  
    A mixin that runs HTTP URI injection tests.  Define
    L{MethodInjectionTestsMixin.attemptRequestWithMaliciousURI} in a
    L{twisted.trial.unittest.SynchronousTestCase} subclass to test how
    HTTP client code behaves when presented with malicious HTTP
    URIs.
    c                     t                      )z
        Attempt to send a request with the given URI.  This should
        synchronously raise a L{ValueError} if either is invalid.

        @param uri: the URI.

        @type method:
        r	   r   s     r   attemptRequestWithMaliciousURIz5URIInjectionTestsMixin.attemptRequestWithMaliciousURIR   s     "###r   c                     |                      t                    5 }d}|                     |           ddd           n# 1 swxY w Y   |                     t	          |j                  d           dS )z
        Issuing a request with a URI whose host contains a carriage
        return and line feed fails with a L{ValueError}.
        s   http://twisted
.invalid/pathN^Invalid URIr   r   r.   r   r   r   r   r   uris      r   test_hostWithCRLFRejectedz0URIInjectionTestsMixin.test_hostWithCRLFRejected]       
 z** 	5b4C//444	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	5 	R\**N;;;;;r   c                     t           D ]}dt          |g          fz  }|                     t                    5 }|                     |           ddd           n# 1 swxY w Y   |                     t          |j                  d           dS )z
        Issuing a request with a URI whose host contains unprintable
        ASCII characters fails with a L{ValueError}.
           http://twisted%s.invalid/OKNr0   r   r   r   r   r.   r   r   r   r   r    r3   r   s       r   )test_hostWithWithUnprintableASCIIRejectedz@URIInjectionTestsMixin.test_hostWithWithUnprintableASCIIRejectedg       
 # 	@ 	@A0IqcNN3DDC"":.. 9"33C8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9S..????		@ 	@r"   c                     t           D ]}dt          |g          fz  }|                     t                    5 }|                     |           ddd           n# 1 swxY w Y   |                     t          |j                  d           dS )z{
        Issuing a request with a URI whose host contains non-ASCII
        characters fails with a L{ValueError}.
        r7   Nr0   r$   r   r   r   r.   r   r   r   r9   s       r   test_hostWithNonASCIIRejectedz4URIInjectionTestsMixin.test_hostWithNonASCIIRejectedr       
  	@ 	@A0IqcNN3DDC"":.. 9"33C8889 9 9 9 9 9 9 9 9 9 9 9 9 9 9S..????		@ 	@r"   c                     |                      t                    5 }d}|                     |           ddd           n# 1 swxY w Y   |                     t	          |j                  d           dS )z
        Issuing a request with a URI whose path contains a carriage
        return and line feed fails with a L{ValueError}.
        s   http://twisted.invalid/
pathNr0   r1   r2   s      r   test_pathWithCRLFRejectedz0URIInjectionTestsMixin.test_pathWithCRLFRejected}   r5   r   c                     t           D ]}dt          |g          fz  }|                     t                    5 }|                     |           ddd           n# 1 swxY w Y   |                     t          |j                  d           dS )z
        Issuing a request with a URI whose path contains unprintable
        ASCII characters fails with a L{ValueError}.
           http://twisted.invalid/OK%sNr0   r8   r9   s       r   )test_pathWithWithUnprintableASCIIRejectedz@URIInjectionTestsMixin.test_pathWithWithUnprintableASCIIRejected   r;   r"   c                     t           D ]}dt          |g          fz  }|                     t                    5 }|                     |           ddd           n# 1 swxY w Y   |                     t          |j                  d           dS )z{
        Issuing a request with a URI whose path contains non-ASCII
        characters fails with a L{ValueError}.
        rC   Nr0   r=   r9   s       r   test_pathWithNonASCIIRejectedz4URIInjectionTestsMixin.test_pathWithNonASCIIRejected   r?   r"   N)r&   r'   r(   r)   r.   r4   r:   r>   rA   rD   rF   r*   r   r   r,   r,   I   s         	$ 	$ 	$< < <	@ 	@ 	@	@ 	@ 	@< < <	@ 	@ 	@	@ 	@ 	@ 	@ 	@r   r,   )
r)   string	frozensetranger   	printabler   r$   r   r,   r*   r   r   <module>rK      s     IeeAsmm,,yyIf((0 0   9UU3__%%6C 6C 6C 6C 6C 6C 6C 6CrR@ R@ R@ R@ R@ R@ R@ R@ R@ R@r   