A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://github.com/protocolbuffers/protobuf/commit/a3921fb6d17a2acef96a40d39d8cb29ff8c0db3b below:

Add recursion depth limits to pure python · protocolbuffers/protobuf@a3921fb · GitHub

36 36

from google.protobuf.internal import more_extensions_pb2

37 37

from google.protobuf.internal import more_messages_pb2

38 38

from google.protobuf.internal import packed_field_test_pb2

39 +

from google.protobuf.internal import self_recursive_pb2

39 40

from google.protobuf.internal import test_proto3_optional_pb2

40 41

from google.protobuf.internal import test_util

41 42

from google.protobuf.internal import testing_refleaks

@@ -1431,6 +1432,52 @@ def testMessageClassName(self, message_module):

1431 1432

)

1432 1433 1433 1434 1435 +

@testing_refleaks.TestCase

1436 +

class TestRecursiveGroup(unittest.TestCase):

1437 + 1438 +

def _MakeRecursiveGroupMessage(self, n):

1439 +

msg = self_recursive_pb2.SelfRecursive()

1440 +

sub = msg

1441 +

for _ in range(n):

1442 +

sub = sub.sub_group

1443 +

sub.i = 1

1444 +

return msg.SerializeToString()

1445 + 1446 +

def testRecursiveGroups(self):

1447 +

recurse_msg = self_recursive_pb2.SelfRecursive()

1448 +

data = self._MakeRecursiveGroupMessage(100)

1449 +

recurse_msg.ParseFromString(data)

1450 +

self.assertTrue(recurse_msg.HasField('sub_group'))

1451 + 1452 +

def testRecursiveGroupsException(self):

1453 +

if api_implementation.Type() != 'python':

1454 +

api_implementation._c_module.SetAllowOversizeProtos(False)

1455 +

recurse_msg = self_recursive_pb2.SelfRecursive()

1456 +

data = self._MakeRecursiveGroupMessage(300)

1457 +

with self.assertRaises(message.DecodeError) as context:

1458 +

recurse_msg.ParseFromString(data)

1459 +

self.assertIn('Error parsing message', str(context.exception))

1460 +

if api_implementation.Type() == 'python':

1461 +

self.assertIn('too many levels of nesting', str(context.exception))

1462 + 1463 +

def testRecursiveGroupsUnknownFields(self):

1464 +

if api_implementation.Type() != 'python':

1465 +

api_implementation._c_module.SetAllowOversizeProtos(False)

1466 +

test_msg = unittest_pb2.TestAllTypes()

1467 +

data = self._MakeRecursiveGroupMessage(300) # unknown to test_msg

1468 +

with self.assertRaises(message.DecodeError) as context:

1469 +

test_msg.ParseFromString(data)

1470 +

self.assertIn(

1471 +

'Error parsing message',

1472 +

str(context.exception),

1473 +

)

1474 +

if api_implementation.Type() == 'python':

1475 +

self.assertIn('too many levels of nesting', str(context.exception))

1476 +

decoder.SetRecursionLimit(310)

1477 +

test_msg.ParseFromString(data)

1478 +

decoder.SetRecursionLimit(decoder.DEFAULT_RECURSION_LIMIT)

1479 + 1480 + 1434 1481

# Class to test proto2-only features (required, extensions, etc.)

1435 1482

@testing_refleaks.TestCase

1436 1483

class Proto2Test(unittest.TestCase):

@@ -2859,8 +2906,6 @@ def testUnpackedFields(self):

2859 2906

self.assertEqual(golden_data, message.SerializeToString())

2860 2907 2861 2908 2862 -

@unittest.skipIf(api_implementation.Type() == 'python',

2863 -

'explicit tests of the C++ implementation')

2864 2909

@testing_refleaks.TestCase

2865 2910

class OversizeProtosTest(unittest.TestCase):

2866 2911

@@ -2877,16 +2922,23 @@ def testSucceedOkSizedProto(self):

2877 2922

msg.ParseFromString(self.GenerateNestedProto(100))

2878 2923 2879 2924

def testAssertOversizeProto(self):

2880 -

api_implementation._c_module.SetAllowOversizeProtos(False)

2925 +

if api_implementation.Type() != 'python':

2926 +

api_implementation._c_module.SetAllowOversizeProtos(False)

2881 2927

msg = unittest_pb2.TestRecursiveMessage()

2882 2928

with self.assertRaises(message.DecodeError) as context:

2883 2929

msg.ParseFromString(self.GenerateNestedProto(101))

2884 2930

self.assertIn('Error parsing message', str(context.exception))

2885 2931 2886 2932

def testSucceedOversizeProto(self):

2887 -

api_implementation._c_module.SetAllowOversizeProtos(True)

2933 + 2934 +

if api_implementation.Type() == 'python':

2935 +

decoder.SetRecursionLimit(310)

2936 +

else:

2937 +

api_implementation._c_module.SetAllowOversizeProtos(True)

2938 + 2888 2939

msg = unittest_pb2.TestRecursiveMessage()

2889 2940

msg.ParseFromString(self.GenerateNestedProto(101))

2941 +

decoder.SetRecursionLimit(decoder.DEFAULT_RECURSION_LIMIT)

2890 2942 2891 2943 2892 2944

if __name__ == '__main__':


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4