@@ -1714,11 +1714,14 @@ def InitGroupTestingData(self):
1714
1714
def CreateManualCode (self , discriminator : int , passcode : int ) -> str :
1715
1715
""" Creates a standard flow manual code from the given discriminator and passcode."""
1716
1716
# 64 bytes is WAY more than required, but let's be safe
1717
- size = 64
1718
- buf = create_string_buffer (size )
1717
+ in_size = 64
1718
+ out_size = c_size_t (0 )
1719
+ buf = create_string_buffer (in_size )
1719
1720
self ._ChipStack .Call (
1720
- lambda : self ._dmLib .pychip_CreateManualCode (discriminator , passcode , buf , size )
1721
+ lambda : self ._dmLib .pychip_CreateManualCode (discriminator , passcode , buf , in_size , pointer ( out_size ) )
1721
1722
).raise_on_error ()
1723
+ if out_size .value == 0 or out_size .value > in_size :
1724
+ raise MemoryError ("Invalid output size for manual code" )
1722
1725
return buf .value .decode ()
1723
1726
1724
1727
# ----- Private Members -----
@@ -1949,7 +1952,7 @@ def _InitLib(self):
1949
1952
self ._dmLib .pychip_DeviceProxy_GetRemoteSessionParameters .argtypes = [c_void_p , c_char_p ]
1950
1953
1951
1954
self ._dmLib .pychip_CreateManualCode .restype = PyChipError
1952
- self ._dmLib .pychip_CreateManualCode .argtypes = [c_uint16 , c_uint32 , c_char_p , c_size_t ]
1955
+ self ._dmLib .pychip_CreateManualCode .argtypes = [c_uint16 , c_uint32 , c_char_p , c_size_t , POINTER ( c_size_t ) ]
1953
1956
1954
1957
1955
1958
class ChipDeviceController (ChipDeviceControllerBase ):
0 commit comments