Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
0.15.0
-
None
Description
Up till python 3.9 a DeprecationWarning was raised when '#' formats were used without defining PY_SSIZE_T_CLEAN:
DeprecationWarning: PY_SSIZE_T_CLEAN will be required for '#' formats iprot._fast_decode(self, iprot, [self.__class__, self.thrift_spec])
Starting with python 3.10 this now becomes a runtime SystemError. Details of change: Python bug tracker 40943
This specifically gets exercised in the c python extension module in ProtocolBase<Impl>::readBytes (src/protocol.tcc) when falling back to the building function.
An easy way to reproduce the error is to pass an empty byte array to the TSerializer.deserialize method, for example:
buf = TTransport.TMemoryBuffer() transport = TTransport.TBufferedTransportFactory().getTransport(buf) factory = TBinaryProtocolAcceleratedFactory(transport) TSerialization.deserialize(Message(), b'', factory) # Message is a thrift struct. This raises a SystemError in python 3.10+
Attachments
Issue Links
- links to