diff --git a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/TaintedObject.java b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/TaintedObject.java index 681ac622e00..9c6aa395040 100644 --- a/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/TaintedObject.java +++ b/dd-java-agent/agent-iast/src/main/java/com/datadog/iast/taint/TaintedObject.java @@ -43,4 +43,18 @@ public Range[] getRanges() { public void setRanges(@Nonnull final Range[] ranges) { this.ranges = ranges; } + + @Override + public String toString() { + final Object referent = get(); + return "[hash: " + + positiveHashCode + + ", gen: " + + generation + + "] " + + (referent == null ? "GCed" : referent) + + " (" + + (ranges == null ? 0 : ranges.length) + + " ranges)"; + } } diff --git a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/ObjectGen.groovy b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/ObjectGen.groovy index a53966661d5..a08038be898 100644 --- a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/ObjectGen.groovy +++ b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/ObjectGen.groovy @@ -9,14 +9,16 @@ class ObjectGen { final int capacity final Map> pool + final Closure factory - ObjectGen(int capacity) { + ObjectGen(int capacity, Closure factory = { new Object() }) { assert (capacity & (capacity - 1)) == 0, 'capacity must be a power of 2' this.capacity = capacity this.pool = new HashMap<>(capacity) for (int i = 0; i < capacity; i++) { this.pool.put(i, new ArrayList()) } + this.factory = factory } def genBuckets(int nBuckets, int nObjects) { @@ -57,7 +59,7 @@ class ObjectGen { def genObjects(int nObjects, Closure isValid) { def res = new ArrayList(nObjects) while (res.size() < nObjects) { - def obj = new Object() + def obj = factory.call() int bucket = getIndex(obj) if (isValid.call(bucket)) { res.add(obj) @@ -69,7 +71,7 @@ class ObjectGen { } def genObject() { - def obj = new Object() + def obj = factory.call() int bucket = getIndex(obj) pool.get(bucket).add(obj) return bucket diff --git a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/TaintedMapTest.groovy b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/TaintedMapTest.groovy index 48375e27979..ad7f7499d9d 100644 --- a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/TaintedMapTest.groovy +++ b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/TaintedMapTest.groovy @@ -15,6 +15,7 @@ import datadog.trace.util.AgentTaskScheduler import java.util.concurrent.CountDownLatch import java.util.concurrent.Executors import java.util.concurrent.TimeUnit +import java.util.concurrent.atomic.AtomicInteger class TaintedMapTest extends DDSpecification { @@ -94,7 +95,8 @@ class TaintedMapTest extends DDSpecification { int iters = 16 int nObjectsPerIter = flatModeThreshold - 1 - def gen = new ObjectGen(capacity) + final atomic = new AtomicInteger() + def gen = new ObjectGen(capacity, { "object_${atomic.incrementAndGet()}"} ) def objectBuffer = new CircularBuffer(iters) when: @@ -119,7 +121,7 @@ class TaintedMapTest extends DDSpecification { } then: - map.size() == iters + assert map.size() == iters: map.toList() map.count() == iters final entries = map.toList() entries.findAll { it.get() != null }.size() == iters diff --git a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/TaintedObjectTest.groovy b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/TaintedObjectTest.groovy index e523bd979fd..5c408b269f6 100644 --- a/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/TaintedObjectTest.groovy +++ b/dd-java-agent/agent-iast/src/test/groovy/com/datadog/iast/taint/TaintedObjectTest.groovy @@ -22,5 +22,6 @@ class TaintedObjectTest extends Specification { then: ranges.size() > max tainted.ranges.size() == max + tainted.toString().contains("${tainted.ranges.size()} ranges") } }