From a932133eab482876f8b20e0d2a4735a539d61ad7 Mon Sep 17 00:00:00 2001 From: Mark Zhang Date: Fri, 5 Jan 2024 13:58:47 +0800 Subject: [PATCH] fix: WeakReferenceKey.equals NPE (#371) --- README.md | 2 +- .../io/arex/agent/bootstrap/InstrumentationHolder.java | 4 ++-- .../java/io/arex/agent/bootstrap/internal/WeakCache.java | 4 ++-- .../io/arex/agent/bootstrap/internal/WeakCacheTest.java | 8 ++++++++ 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index a7bdde842..babac5460 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ [![Build Status](https://github.com/arextest/arex-agent-java/actions/workflows/build.yml/badge.svg?branch=main)](https://github.com/arextest/arex-agent-java/actions/workflows/build.yml) -[![codecov](https://codecov.io/gh/arextest/arex-agent-java/branch/main/graph/badge.svg)](https://app.codecov.io/gh/arextest/arex-agent-java) +[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=arextest_arex-agent-java&metric=coverage)](https://sonarcloud.io/summary/overall?id=arextest_arex-agent-java) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=arextest_arex-agent-java&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=arextest_arex-agent-java) # Arex Icon AREX diff --git a/arex-agent-bootstrap/src/main/java/io/arex/agent/bootstrap/InstrumentationHolder.java b/arex-agent-bootstrap/src/main/java/io/arex/agent/bootstrap/InstrumentationHolder.java index 8f993cf65..7b7d9006d 100644 --- a/arex-agent-bootstrap/src/main/java/io/arex/agent/bootstrap/InstrumentationHolder.java +++ b/arex-agent-bootstrap/src/main/java/io/arex/agent/bootstrap/InstrumentationHolder.java @@ -3,9 +3,9 @@ import java.lang.instrument.Instrumentation; public class InstrumentationHolder { - private static volatile Instrumentation instrumentation; + private static Instrumentation instrumentation; - private static volatile ClassLoader agentClassLoader; + private static ClassLoader agentClassLoader; public static Instrumentation getInstrumentation() { return instrumentation; diff --git a/arex-agent-bootstrap/src/main/java/io/arex/agent/bootstrap/internal/WeakCache.java b/arex-agent-bootstrap/src/main/java/io/arex/agent/bootstrap/internal/WeakCache.java index 92a3e6f14..3aedb58c8 100644 --- a/arex-agent-bootstrap/src/main/java/io/arex/agent/bootstrap/internal/WeakCache.java +++ b/arex-agent-bootstrap/src/main/java/io/arex/agent/bootstrap/internal/WeakCache.java @@ -63,9 +63,9 @@ public int hashCode() { public boolean equals(Object other) { if (other instanceof WeakCache.WeakReferenceKey) { return ((WeakReferenceKey) other).get() == get(); - } else { - return other.equals(this); } + + return other != null && other.equals(this); } } } diff --git a/arex-agent-bootstrap/src/test/java/io/arex/agent/bootstrap/internal/WeakCacheTest.java b/arex-agent-bootstrap/src/test/java/io/arex/agent/bootstrap/internal/WeakCacheTest.java index b94f31087..8fe070dbd 100644 --- a/arex-agent-bootstrap/src/test/java/io/arex/agent/bootstrap/internal/WeakCacheTest.java +++ b/arex-agent-bootstrap/src/test/java/io/arex/agent/bootstrap/internal/WeakCacheTest.java @@ -2,6 +2,7 @@ import static org.junit.jupiter.api.Assertions.*; +import java.lang.ref.ReferenceQueue; import java.util.concurrent.ForkJoinTask; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.AfterEach; @@ -56,4 +57,11 @@ void testNormalKeyValue() throws InterruptedException { // check -> remove after gc assertFalse(Cache.CAPTURED_CACHE.contains(null)); } + + @Test + void testWeakReferenceKeyEqualsReturnsFalse() { + WeakCache.WeakReferenceKey key = new WeakCache.WeakReferenceKey<>("test", new ReferenceQueue<>()); + assertFalse(key.equals(null)); + assertFalse(key.equals("test")); + } }