+
    DfjÙ  ã                   ó²   € R t ^ RIt]! ]! ^ ^€4      4      ]! ]! ]P
                  R4      4      ,
          t]! ]! ^€R4      4      t ! R R4      t ! R R4      t	R# )zF
Helpers for URI and method injection tests.

@see: U{CVE-2019-12387}
NÚasciié   c                   ó<   a € ] tR t^t o RtR tR tR tR tRt	V t
R# )ÚMethodInjectionTestsMixina  
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                ó   € \        4       h)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   &&ÚC/usr/lib/python3/dist-packages/twisted/web/test/injectionhelpers.pyÚ!attemptRequestWithMaliciousMethodÚ;MethodInjectionTestsMixin.attemptRequestWithMaliciousMethod   s   € ô "Ó#Ð#ó    c                óè   € V P                  \        4      ;_uu_ 4       pRpV P                  V4       RRR4       V P                  \	        XP
                  4      R4       R#   + '       g   i     L7; i)zk
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_methodWithCLRFRejectedÚ5MethodInjectionTestsMixin.test_methodWithCLRFRejected(   sT   € ð
 ×Ñœz×*Ô*¨bØ7ˆFØ×2Ñ2°6Ô:÷ +ð 	×Ñœ˜RŸ\™\Ó*Ð,=Ö>÷ +×*úó   žA!Á!A1	c                ó&  € \          Fs  pR\        V.4      3,          pV P                  \        4      ;_uu_ 4       pV P	                  V4       RRR4       V P                  \        XP                  4      R4       Ku  	  R#   + '       g   i     L;; i)zh
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_methodWithUnprintableASCIIRejectedÚAMethodInjectionTestsMixin.test_methodWithUnprintableASCIIRejected2   sh   € ÷
 #ˆAØ¤¨A¨3£Ð 1Õ1ˆFØ×"Ñ"¤:×.Ô.°"Ø×6Ñ6°vÔ>÷ /à×ÑœS §¡Ó.Ð0AÖBó	 #ç.×.úó   »B Â Bc                ó&  € \          Fs  pR\        V.4      3,          pV P                  \        4      ;_uu_ 4       pV P	                  V4       RRR4       V P                  \        XP                  4      R4       Ku  	  R#   + '       g   i     L;; i)z`
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_methodWithNonASCIIRejectedÚ9MethodInjectionTestsMixin.test_methodWithNonASCIIRejected=   sh   € ÷
 ˆAØ¤¨A¨3£Ð 1Õ1ˆFØ×"Ñ"¤:×.Ô.°"Ø×6Ñ6°vÔ>÷ /à×ÑœS §¡Ó.Ð0AÖBó	 ç.×.úr#   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r!   r&   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   r   r      s&   ø‡ € ñò$ò?ò	C÷	Cð 	Cr   r   c                   óN   a € ] tR t^It o RtR tR tR tR tR t	R t
R tR	tV tR
# )ÚURIInjectionTestsMixinzû
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                ó   € \        4       h)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   ÚattemptRequestWithMaliciousURIÚ5URIInjectionTestsMixin.attemptRequestWithMaliciousURIR   s   € ô "Ó#Ð#r   c                óè   € V P                  \        4      ;_uu_ 4       pRpV P                  V4       RRR4       V P                  \	        XP
                  4      R4       R#   + '       g   i     L7; i)zn
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   r5   r   r   r   ©r
   r   Úuris   &  r   Útest_hostWithCRLFRejectedÚ0URIInjectionTestsMixin.test_hostWithCRLFRejected]   óS   € ð
 ×Ñœz×*Ô*¨bØ4ˆCØ×/Ñ/°Ô4÷ +ð 	×Ñœ˜RŸ\™\Ó*¨NÖ;÷ +×*úr   c                ó&  € \          Fs  pR\        V.4      3,          pV P                  \        4      ;_uu_ 4       pV P	                  V4       RRR4       V P                  \        XP                  4      R4       Ku  	  R#   + '       g   i     L;; i)zk
Issuing a request with a URI whose host contains unprintable
ASCII characters fails with a L{ValueError}.
ó   http://twisted%s.invalid/OKNr8   ©r   r   r   r   r5   r   r   r   ©r
   r    r;   r   s   &   r   Ú)test_hostWithWithUnprintableASCIIRejectedÚ@URIInjectionTestsMixin.test_hostWithWithUnprintableASCIIRejectedg   óg   € ÷
 #ˆAØ0´I¸q¸c³NÐ3DÕDˆCØ×"Ñ"¤:×.Ô.°"Ø×3Ñ3°CÔ8÷ /à×ÑœS §¡Ó.°Ö?ó	 #ç.×.úr#   c                ó&  € \          Fs  pR\        V.4      3,          pV P                  \        4      ;_uu_ 4       pV P	                  V4       RRR4       V P                  \        XP                  4      R4       Ku  	  R#   + '       g   i     L;; i)zc
Issuing a request with a URI whose host contains non-ASCII
characters fails with a L{ValueError}.
r@   Nr8   ©r%   r   r   r   r5   r   r   r   rB   s   &   r   Útest_hostWithNonASCIIRejectedÚ4URIInjectionTestsMixin.test_hostWithNonASCIIRejectedr   óg   € ÷
 ˆAØ0´I¸q¸c³NÐ3DÕDˆCØ×"Ñ"¤:×.Ô.°"Ø×3Ñ3°CÔ8÷ /à×ÑœS §¡Ó.°Ö?ó	 ç.×.úr#   c                óè   € V P                  \        4      ;_uu_ 4       pRpV P                  V4       RRR4       V P                  \	        XP
                  4      R4       R#   + '       g   i     L7; i)zn
Issuing a request with a URI whose path contains a carriage
return and line feed fails with a L{ValueError}.
s   http://twisted.invalid/
pathNr8   r9   r:   s   &  r   Útest_pathWithCRLFRejectedÚ0URIInjectionTestsMixin.test_pathWithCRLFRejected}   r>   r   c                ó&  € \          Fs  pR\        V.4      3,          pV P                  \        4      ;_uu_ 4       pV P	                  V4       RRR4       V P                  \        XP                  4      R4       Ku  	  R#   + '       g   i     L;; i)zk
Issuing a request with a URI whose path contains unprintable
ASCII characters fails with a L{ValueError}.
ó   http://twisted.invalid/OK%sNr8   rA   rB   s   &   r   Ú)test_pathWithWithUnprintableASCIIRejectedÚ@URIInjectionTestsMixin.test_pathWithWithUnprintableASCIIRejected‡   rE   r#   c                ó&  € \          Fs  pR\        V.4      3,          pV P                  \        4      ;_uu_ 4       pV P	                  V4       RRR4       V P                  \        XP                  4      R4       Ku  	  R#   + '       g   i     L;; i)zc
Issuing a request with a URI whose path contains non-ASCII
characters fails with a L{ValueError}.
rO   Nr8   rG   rB   s   &   r   Útest_pathWithNonASCIIRejectedÚ4URIInjectionTestsMixin.test_pathWithNonASCIIRejected’   rJ   r#   r(   N)r)   r*   r+   r,   r-   r5   r<   rC   rH   rL   rP   rS   r.   r/   r0   s   @r   r3   r3   I   s7   ø‡ € ñò	$ò<ò	@ò	@ò<ò	@÷	@ð 	@r   r3   )
r-   ÚstringÚ	frozensetÚranger   Ú	printabler   r%   r   r3   r(   r   r   Ú<module>rY      si   ðñó á™e A s›mÓ,©yÙˆf×Ñ Ó(ó0õ Ð ñ ‘U˜3 “_Ó%€÷6Cñ 6C÷rR@ó R@r   