@@ -845,7 +845,7 @@ def test_bad_gzip_request(self):
845845 p .pow (6 , 8 )
846846 p ("close" )()
847847
848- def test_gsip_response (self ):
848+ def test_gzip_response (self ):
849849 t = self .Transport ()
850850 p = xmlrpclib .ServerProxy (URL , transport = t )
851851 old = self .requestHandler .encode_threshold
@@ -859,6 +859,26 @@ def test_gsip_response(self):
859859 self .requestHandler .encode_threshold = old
860860 self .assertTrue (a > b )
861861
862+
863+ class GzipUtilTestCase (unittest .TestCase ):
864+
865+ def test_gzip_decode_limit (self ):
866+ max_gzip_decode = 20 * 1024 * 1024
867+ data = b'\0 ' * max_gzip_decode
868+ encoded = xmlrpclib .gzip_encode (data )
869+ decoded = xmlrpclib .gzip_decode (encoded )
870+ self .assertEqual (len (decoded ), max_gzip_decode )
871+
872+ data = b'\0 ' * (max_gzip_decode + 1 )
873+ encoded = xmlrpclib .gzip_encode (data )
874+
875+ with self .assertRaisesRegexp (ValueError ,
876+ "max gzipped payload length exceeded" ):
877+ xmlrpclib .gzip_decode (encoded )
878+
879+ xmlrpclib .gzip_decode (encoded , max_decode = - 1 )
880+
881+
862882#Test special attributes of the ServerProxy object
863883class ServerProxyTestCase (unittest .TestCase ):
864884 def setUp (self ):
@@ -1093,6 +1113,7 @@ def test_main():
10931113 try :
10941114 import gzip
10951115 xmlrpc_tests .append (GzipServerTestCase )
1116+ xmlrpc_tests .append (GzipUtilTestCase )
10961117 except ImportError :
10971118 pass #gzip not supported in this build
10981119 xmlrpc_tests .append (MultiPathServerTestCase )
0 commit comments