diff --git a/tracer/src/Datadog.Trace/Iast/DefaultTaintedMap.cs b/tracer/src/Datadog.Trace/Iast/DefaultTaintedMap.cs index 7c75ec2866e0..dc6608ee8cd9 100644 --- a/tracer/src/Datadog.Trace/Iast/DefaultTaintedMap.cs +++ b/tracer/src/Datadog.Trace/Iast/DefaultTaintedMap.cs @@ -228,7 +228,7 @@ public void Clear() private int IndexObject(object objectStored) { - return Index(PositiveHashCode(objectStored.GetHashCode())); + return Index(PositiveHashCode(IastUtils.IdentityHashCode(objectStored))); } private int PositiveHashCode(int hash) diff --git a/tracer/src/Datadog.Trace/Iast/IastUtils.cs b/tracer/src/Datadog.Trace/Iast/IastUtils.cs index 91e1dc4bb19e..9567371ae8eb 100644 --- a/tracer/src/Datadog.Trace/Iast/IastUtils.cs +++ b/tracer/src/Datadog.Trace/Iast/IastUtils.cs @@ -71,7 +71,20 @@ private static int GetHash(T element) public static int IdentityHashCode(object item) { - return (item?.GetHashCode() ?? 0); + if (item == null) + { + return 0; + } + + try + { + return item.GetHashCode(); + } + catch + { + // Seen this that it appears some customer objects have overrode GetHashCode and throw + return System.Runtime.CompilerServices.RuntimeHelpers.GetHashCode(item); + } } public static Range[] GetRangesForString(string stringValue, Source source)