THRIFT-3235 C#: Limit recursion depth to 64
Client: C#
Patch: Jens Geyer
diff --git a/lib/csharp/src/Protocol/TProtocol.cs b/lib/csharp/src/Protocol/TProtocol.cs
index 1f5bd81..bf481ab 100644
--- a/lib/csharp/src/Protocol/TProtocol.cs
+++ b/lib/csharp/src/Protocol/TProtocol.cs
@@ -29,11 +29,17 @@
{
public abstract class TProtocol : IDisposable
{
+ private const int DEFAULT_RECURSION_DEPTH = 64;
+
protected TTransport trans;
+ protected int recursionLimit;
+ protected int recursionDepth;
protected TProtocol(TTransport trans)
{
this.trans = trans;
+ this.recursionLimit = DEFAULT_RECURSION_DEPTH;
+ this.recursionDepth = 0;
}
public TTransport Transport
@@ -41,6 +47,25 @@
get { return trans; }
}
+ public int RecursionLimit
+ {
+ get { return recursionLimit; }
+ set { recursionLimit = value; }
+ }
+
+ public void IncrementRecursionDepth()
+ {
+ if (recursionDepth < recursionLimit)
+ ++recursionDepth;
+ else
+ throw new TProtocolException(TProtocolException.DEPTH_LIMIT, "Depth limit exceeded");
+ }
+
+ public void DecrementRecursionDepth()
+ {
+ --recursionDepth;
+ }
+
#region " IDisposable Support "
private bool _IsDisposed;