diff --git a/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/safety/SafetyPropagationTransfer.java b/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/safety/SafetyPropagationTransfer.java index 5655a794d..107e3a25b 100644 --- a/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/safety/SafetyPropagationTransfer.java +++ b/baseline-error-prone/src/main/java/com/palantir/baseline/errorprone/safety/SafetyPropagationTransfer.java @@ -530,7 +530,9 @@ public TransferResult> visitAssignment( if (target instanceof LocalVariableNode) { updates.trySet(target, safety); } else if (target instanceof ArrayAccessNode) { - updates.trySet(((ArrayAccessNode) target).getArray(), safety); + Node arrayNode = ((ArrayAccessNode) target).getArray(); + Safety arrayCombinedSafety = input.getValueOfSubNode(arrayNode).leastUpperBound(safety); + updates.trySet(arrayNode, arrayCombinedSafety); } else if (target instanceof FieldAccessNode) { FieldAccessNode fieldAccess = (FieldAccessNode) target; updates.set(fieldAccess, safety); diff --git a/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgumentTest.java b/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgumentTest.java index a0007820e..45ff16203 100644 --- a/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgumentTest.java +++ b/baseline-error-prone/src/test/java/com/palantir/baseline/errorprone/IllegalSafeLoggingArgumentTest.java @@ -710,6 +710,10 @@ public void testArraySafety() { " // BUG: Diagnostic contains: Dangerous argument value: arg is 'DO_NOT_LOG' " + "but the parameter requires 'SAFE'.", " fun(one);", + " one[2] = safeParam;", + " // BUG: Diagnostic contains: Dangerous argument value: arg is 'DO_NOT_LOG' " + + "but the parameter requires 'SAFE'.", + " fun(one);", " // BUG: Diagnostic contains: Dangerous argument value: arg is 'DO_NOT_LOG' " + "but the parameter requires 'SAFE'.", " fun(new Object[] {safeParam, unsafeParam, dnlParam});", diff --git a/changelog/@unreleased/pr-2154.v2.yml b/changelog/@unreleased/pr-2154.v2.yml new file mode 100644 index 000000000..9e251d9c3 --- /dev/null +++ b/changelog/@unreleased/pr-2154.v2.yml @@ -0,0 +1,5 @@ +type: improvement +improvement: + description: Array assignment merges safety rather than replacing it + links: + - https://github.com/palantir/gradle-baseline/pull/2154