@@ -776,7 +776,7 @@ def test_bad_gzip_request(self):
776776 p .pow (6 , 8 )
777777 p ("close" )()
778778
779- def test_gsip_response (self ):
779+ def test_gzip_response (self ):
780780 t = self .Transport ()
781781 p = xmlrpclib .ServerProxy (URL , transport = t )
782782 old = self .requestHandler .encode_threshold
@@ -790,6 +790,26 @@ def test_gsip_response(self):
790790 self .requestHandler .encode_threshold = old
791791 self .assertTrue (a > b )
792792
793+
794+ class GzipUtilTestCase (unittest .TestCase ):
795+
796+ def test_gzip_decode_limit (self ):
797+ max_gzip_decode = 20 * 1024 * 1024
798+ data = b'\0 ' * max_gzip_decode
799+ encoded = xmlrpclib .gzip_encode (data )
800+ decoded = xmlrpclib .gzip_decode (encoded )
801+ self .assertEqual (len (decoded ), max_gzip_decode )
802+
803+ data = b'\0 ' * (max_gzip_decode + 1 )
804+ encoded = xmlrpclib .gzip_encode (data )
805+
806+ with self .assertRaisesRegexp (ValueError ,
807+ "max gzipped payload length exceeded" ):
808+ xmlrpclib .gzip_decode (encoded )
809+
810+ xmlrpclib .gzip_decode (encoded , max_decode = - 1 )
811+
812+
793813#Test special attributes of the ServerProxy object
794814class ServerProxyTestCase (unittest .TestCase ):
795815 def setUp (self ):
@@ -990,6 +1010,7 @@ def test_main():
9901010 try :
9911011 import gzip
9921012 xmlrpc_tests .append (GzipServerTestCase )
1013+ xmlrpc_tests .append (GzipUtilTestCase )
9931014 except ImportError :
9941015 pass #gzip not supported in this build
9951016 xmlrpc_tests .append (MultiPathServerTestCase )
0 commit comments