Ë
    „ÇVhÙ  ã                   ó¨   — 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	y)
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y)Ú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     úQ/home/dcms/DCMS/lib/python3.12/site-packages/twisted/web/test/injectionhelpers.pyÚ!attemptRequestWithMaliciousMethodz;MethodInjectionTestsMixin.attemptRequestWithMaliciousMethod   s   € ô "Ó#Ð#ó    c                 óÈ   — | j                  t        «      5 }d}| j                  |«       ddd«       | j                  t	        j
                  «      d«       y# 1 sw Y   Œ/xY w)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(   sX   € ð
 ×ÑœzÓ*ð 	;¨bØ7ˆFØ×2Ñ2°6Ô:÷	;ð 	×Ñœ˜RŸ\™\Ó*Ð,=Õ>÷	;ð 	;úó   –AÁA!c                 óú   — t         D ]f  }dt        |g«      fz  }| j                  t        «      5 }| j	                  |«       ddd«       | j                  t        j                  «      d«       Œh y# 1 sw Y   Œ1xY w)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   su   € ô
 #ò 	CˆAØ¤¨A¨3£Ð 1Ñ1ˆFØ×"Ñ"¤:Ó.ð ?°"Ø×6Ñ6°vÔ>÷?à×ÑœS §¡Ó.Ð0AÕBñ		C÷?ð ?úó   ¯A1Á1A:	c                 óú   — t         D ]f  }dt        |g«      fz  }| j                  t        «      5 }| j	                  |«       ddd«       | j                  t        j                  «      d«       Œh y# 1 sw Y   Œ1xY w)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=   su   € ô
 ò 	CˆAØ¤¨A¨3£Ð 1Ñ1ˆFØ×"Ñ"¤:Ó.ð ?°"Ø×6Ñ6°vÔ>÷?à×ÑœS §¡Ó.Ð0AÕBñ		C÷?ð ?úr"   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r!   r%   © r   r   r   r      s   „ ñò$ò?ò	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
y	)
Ú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                 óÈ   — | j                  t        «      5 }d}| j                  |«       ddd«       | j                  t	        j
                  «      d«       y# 1 sw Y   Œ/xY w)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]   óW   € ð
 ×ÑœzÓ*ð 	5¨bØ4ˆCØ×/Ñ/°Ô4÷	5ð 	×Ñœ˜RŸ\™\Ó*¨NÕ;÷	5ð 	5úr   c                 óú   — t         D ]f  }dt        |g«      fz  }| j                  t        «      5 }| j	                  |«       ddd«       | j                  t        j                  «      d«       Œh y# 1 sw Y   Œ1xY w)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   ót   € ô
 #ò 	@ˆAØ0´I¸q¸c³NÐ3DÑDˆCØ×"Ñ"¤:Ó.ð 9°"Ø×3Ñ3°CÔ8÷9à×ÑœS §¡Ó.°Õ?ñ		@÷9ð 9úr"   c                 óú   — t         D ]f  }dt        |g«      fz  }| j                  t        «      5 }| j	                  |«       ddd«       | j                  t        j                  «      d«       Œh y# 1 sw Y   Œ1xY w)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   ót   € ô
 ò 	@ˆAØ0´I¸q¸c³NÐ3DÑDˆCØ×"Ñ"¤:Ó.ð 9°"Ø×3Ñ3°CÔ8÷9à×ÑœS §¡Ó.°Õ?ñ		@÷9ð 9úr"   c                 óÈ   — | j                  t        «      5 }d}| j                  |«       ddd«       | j                  t	        j
                  «      d«       y# 1 sw Y   Œ/xY w)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 ]f  }dt        |g«      fz  }| j                  t        «      5 }| j	                  |«       ddd«       | j                  t        j                  «      d«       Œh y# 1 sw Y   Œ1xY w)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 ]f  }dt        |g«      fz  }| j                  t        «      5 }| j	                  |«       ddd«       | j                  t        j                  «      d«       Œh y# 1 sw Y   Œ1xY w)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      si   ðñó á™e A s›mÓ,©yÙˆf×Ñ Ó(ó0ñ Ð ñ ‘U˜3 “_Ó%€÷6Cñ 6C÷rR@ò R@r   