[THRIFT-5871] Improve MAX_MESSAGE_SIZE_CHECK and friends
diff --git a/lib/netstd/Thrift/Protocol/TBinaryProtocol.cs b/lib/netstd/Thrift/Protocol/TBinaryProtocol.cs
index 44fa9f7..fc5be9a 100644
--- a/lib/netstd/Thrift/Protocol/TBinaryProtocol.cs
+++ b/lib/netstd/Thrift/Protocol/TBinaryProtocol.cs
@@ -452,8 +452,8 @@
{
switch (type)
{
- case TType.Stop: return 0;
- case TType.Void: return 0;
+ case TType.Stop: return 1; // T_STOP needs to count itself
+ case TType.Void: return 1; // T_VOID needs to count itself
case TType.Bool: return sizeof(byte);
case TType.Byte: return sizeof(byte);
case TType.Double: return sizeof(double);
@@ -461,7 +461,7 @@
case TType.I32: return sizeof(int);
case TType.I64: return sizeof(long);
case TType.String: return sizeof(int); // string length
- case TType.Struct: return 0; // empty struct
+ case TType.Struct: return 1; // empty struct needs at least 1 byte for the T_STOP
case TType.Map: return sizeof(int); // element count
case TType.Set: return sizeof(int); // element count
case TType.List: return sizeof(int); // element count
diff --git a/lib/netstd/Thrift/Protocol/TCompactProtocol.cs b/lib/netstd/Thrift/Protocol/TCompactProtocol.cs
index 1fd7e50..5ca4841 100644
--- a/lib/netstd/Thrift/Protocol/TCompactProtocol.cs
+++ b/lib/netstd/Thrift/Protocol/TCompactProtocol.cs
@@ -816,8 +816,8 @@
{
switch (type)
{
- case TType.Stop: return 0;
- case TType.Void: return 0;
+ case TType.Stop: return 1; // T_STOP needs to count itself
+ case TType.Void: return 1; // T_VOID needs to count itself
case TType.Bool: return sizeof(byte);
case TType.Double: return 8; // uses fixedLongToBytes() which always writes 8 bytes
case TType.Byte: return sizeof(byte);
@@ -825,7 +825,7 @@
case TType.I32: return sizeof(byte); // zigzag
case TType.I64: return sizeof(byte); // zigzag
case TType.String: return sizeof(byte); // string length
- case TType.Struct: return 0; // empty struct
+ case TType.Struct: return 1; // empty struct needs at least 1 byte for the T_STOP
case TType.Map: return sizeof(byte); // element count
case TType.Set: return sizeof(byte); // element count
case TType.List: return sizeof(byte); // element count
diff --git a/lib/netstd/Thrift/Protocol/TJSONProtocol.cs b/lib/netstd/Thrift/Protocol/TJSONProtocol.cs
index 170f294..37424a7 100644
--- a/lib/netstd/Thrift/Protocol/TJSONProtocol.cs
+++ b/lib/netstd/Thrift/Protocol/TJSONProtocol.cs
@@ -838,8 +838,8 @@
{
switch (type)
{
- case TType.Stop: return 0;
- case TType.Void: return 0;
+ case TType.Stop: return 1; // T_STOP needs to count itself
+ case TType.Void: return 1; // T_VOID needs to count itself
case TType.Bool: return 1; // written as int
case TType.Byte: return 1;
case TType.Double: return 1;