Fix: fix readMessageBegin name type error
Client: ["python"]
diff --git a/lib/py/src/protocol/TBinaryProtocol.py b/lib/py/src/protocol/TBinaryProtocol.py
index 6b2facc..e59e0dc 100644
--- a/lib/py/src/protocol/TBinaryProtocol.py
+++ b/lib/py/src/protocol/TBinaryProtocol.py
@@ -18,6 +18,7 @@
 #
 
 from .TProtocol import TType, TProtocolBase, TProtocolException, TProtocolFactory
+from ..compat import binary_to_str
 from struct import pack, unpack
 
 
@@ -145,7 +146,7 @@
             if self.strictRead:
                 raise TProtocolException(type=TProtocolException.BAD_VERSION,
                                          message='No protocol version header')
-            name = self.trans.readAll(sz)
+            name = binary_to_str(self.trans.readAll(sz))
             type = self.readByte()
             seqid = self.readI32()
         return (name, type, seqid)
diff --git a/lib/py/test/thrift_TBinaryProtocol.py b/lib/py/test/thrift_TBinaryProtocol.py
index f7d05ff..b257626 100644
--- a/lib/py/test/thrift_TBinaryProtocol.py
+++ b/lib/py/test/thrift_TBinaryProtocol.py
@@ -152,15 +152,19 @@
     protocol.readStructEnd()
 
 
-def testMessage(data):
+def testMessage(data, strict=True):
     message = {}
     message['name'] = data[0]
     message['type'] = data[1]
     message['seqid'] = data[2]
 
+    strictRead, strictWrite = True, True
+    if not strict:
+        strictRead, strictWrite = False, False
+
     buf = TTransport.TMemoryBuffer()
     transport = TTransport.TBufferedTransportFactory().getTransport(buf)
-    protocol = TBinaryProtocol(transport)
+    protocol = TBinaryProtocol(transport, strictRead=strictRead, strictWrite=strictWrite)
     protocol.writeMessageBegin(message['name'], message['type'], message['seqid'])
     protocol.writeMessageEnd()
 
@@ -169,7 +173,7 @@
 
     buf = TTransport.TMemoryBuffer(data_r)
     transport = TTransport.TBufferedTransportFactory().getTransport(buf)
-    protocol = TBinaryProtocol(transport)
+    protocol = TBinaryProtocol(transport, strictRead=strictRead, strictWrite=strictWrite)
     result = protocol.readMessageBegin()
     protocol.readMessageEnd()
     return result
@@ -259,6 +263,24 @@
             print("Assertion fail")
             raise e
 
+    def test_TBinaryProtocol_no_strict_write_read(self):
+        TMessageType = {"T_CALL": 1, "T_REPLY": 2, "T_EXCEPTION": 3, "T_ONEWAY": 4}
+        test_data = [("short message name", TMessageType['T_CALL'], 0),
+                        ("1", TMessageType['T_REPLY'], 12345),
+                        ("loooooooooooooooooooooooooooooooooong", TMessageType['T_EXCEPTION'], 1 << 16),
+                        ("one way push", TMessageType['T_ONEWAY'], 12),
+                        ("Janky", TMessageType['T_CALL'], 0)]
+
+        try:
+            for dt in test_data:
+                result = testMessage(dt, strict=False)
+                self.assertEqual(result[0], dt[0])
+                self.assertEqual(result[1], dt[1])
+                self.assertEqual(result[2], dt[2])
+        except Exception as e:
+            print("Assertion fail")
+            raise e
+
 
 if __name__ == '__main__':
     unittest.main()