�
Ϫ�f� � � � d Z ddlZ e edd� � e eej
d� � z
Z e edd� � 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 Zd ZdZd� Zd� Zd� Zd� Zy)�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 �C/usr/lib/python3/dist-packages/twisted/web/test/injectionhelpers.py�!attemptRequestWithMaliciousMethodz;MethodInjectionTestsMixin.attemptRequestWithMaliciousMethod s
� � "�#�#� c �� � | j t � 5 }d}| j |� ddd� | j t j
� d� y# 1 sw Y �/xY 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 }dt |g� fz }| j t � 5 }| j |� ddd� | j t
j � d� �h y# 1 sw Y �1xY 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�1A: c � � t D ]f }dt |g� fz }| j t � 5 }| j |� ddd� | j t
j � d� �h y# 1 sw Y �1xY 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" |