It adds a wrapper function for C.PyBytes_FromStringAndSize that explicitly uses the Go string's length. This allows to correctly turn Go strings into Python bytes objects even when they contain NUL characters.
Motivation
I wrote code that receives binary protobuf messages and hands them over to python code that in turn parses it into a python object and then processes the message. I noticed that when I used python3.PyBytes_FromString to turn the binary message into a python bytes object, it got truncated at NUL characters, which caused failures when decoding. Upon closer inspection, I noticed that this was inherent in how PyBytes_FromString worked, so I created this PR to fix this shortcoming.
What does this PR do?
It adds a wrapper function for
C.PyBytes_FromStringAndSize
that explicitly uses the Go string's length. This allows to correctly turn Go strings into Pythonbytes
objects even when they contain NUL characters.Motivation
I wrote code that receives binary protobuf messages and hands them over to python code that in turn parses it into a python object and then processes the message. I noticed that when I used
python3.PyBytes_FromString
to turn the binary message into a pythonbytes
object, it got truncated at NUL characters, which caused failures when decoding. Upon closer inspection, I noticed that this was inherent in howPyBytes_FromString
worked, so I created this PR to fix this shortcoming.Additional Notes
None.