A RetroSearch Logo

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

Search Query:

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

Add recursion depth limits to pure python · protocolbuffers/protobuf@05ba1a8 · 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

@@ -1339,6 +1340,52 @@ def testIn(self, message_module):

1339 1340

self.assertNotIn('oneof_string', m)

1340 1341 1341 1342 1343 +

@testing_refleaks.TestCase

1344 +

class TestRecursiveGroup(unittest.TestCase):

1345 + 1346 +

def _MakeRecursiveGroupMessage(self, n):

1347 +

msg = self_recursive_pb2.SelfRecursive()

1348 +

sub = msg

1349 +

for _ in range(n):

1350 +

sub = sub.sub_group

1351 +

sub.i = 1

1352 +

return msg.SerializeToString()

1353 + 1354 +

def testRecursiveGroups(self):

1355 +

recurse_msg = self_recursive_pb2.SelfRecursive()

1356 +

data = self._MakeRecursiveGroupMessage(100)

1357 +

recurse_msg.ParseFromString(data)

1358 +

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

1359 + 1360 +

def testRecursiveGroupsException(self):

1361 +

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

1362 +

api_implementation._c_module.SetAllowOversizeProtos(False)

1363 +

recurse_msg = self_recursive_pb2.SelfRecursive()

1364 +

data = self._MakeRecursiveGroupMessage(300)

1365 +

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

1366 +

recurse_msg.ParseFromString(data)

1367 +

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

1368 +

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

1369 +

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

1370 + 1371 +

def testRecursiveGroupsUnknownFields(self):

1372 +

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

1373 +

api_implementation._c_module.SetAllowOversizeProtos(False)

1374 +

test_msg = unittest_pb2.TestAllTypes()

1375 +

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

1376 +

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

1377 +

test_msg.ParseFromString(data)

1378 +

self.assertIn(

1379 +

'Error parsing message',

1380 +

str(context.exception),

1381 +

)

1382 +

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

1383 +

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

1384 +

decoder.SetRecursionLimit(310)

1385 +

test_msg.ParseFromString(data)

1386 +

decoder.SetRecursionLimit(decoder.DEFAULT_RECURSION_LIMIT)

1387 + 1388 + 1342 1389

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

1343 1390

@testing_refleaks.TestCase

1344 1391

class Proto2Test(unittest.TestCase):

@@ -2728,8 +2775,6 @@ def testUnpackedFields(self):

2728 2775

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

2729 2776 2730 2777 2731 -

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

2732 -

'explicit tests of the C++ implementation')

2733 2778

@testing_refleaks.TestCase

2734 2779

class OversizeProtosTest(unittest.TestCase):

2735 2780

@@ -2746,16 +2791,23 @@ def testSucceedOkSizedProto(self):

2746 2791

msg.ParseFromString(self.GenerateNestedProto(100))

2747 2792 2748 2793

def testAssertOversizeProto(self):

2749 -

api_implementation._c_module.SetAllowOversizeProtos(False)

2794 +

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

2795 +

api_implementation._c_module.SetAllowOversizeProtos(False)

2750 2796

msg = unittest_pb2.TestRecursiveMessage()

2751 2797

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

2752 2798

msg.ParseFromString(self.GenerateNestedProto(101))

2753 2799

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

2754 2800 2755 2801

def testSucceedOversizeProto(self):

2756 -

api_implementation._c_module.SetAllowOversizeProtos(True)

2802 + 2803 +

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

2804 +

decoder.SetRecursionLimit(310)

2805 +

else:

2806 +

api_implementation._c_module.SetAllowOversizeProtos(True)

2807 + 2757 2808

msg = unittest_pb2.TestRecursiveMessage()

2758 2809

msg.ParseFromString(self.GenerateNestedProto(101))

2810 +

decoder.SetRecursionLimit(decoder.DEFAULT_RECURSION_LIMIT)

2759 2811 2760 2812 2761 2813

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