From d20e1df520cf16339753ff494950097784908c54 Mon Sep 17 00:00:00 2001 From: Pavel Ptashyts <49400901+pavel-ptashyts@users.noreply.github.com> Date: Sun, 19 Jul 2026 18:12:32 +0200 Subject: [PATCH] Short-circuit empty cookie store lookups Return an empty cookie list immediately when ThreadSafeCookieStore has no retained cookies. This avoids request host normalization, path lookup, and subdomain scanning on the common empty-jar path while preserving null handling with an explicit Uri null check. Add coverage for get(Uri) on an empty store. Verified with:\n- /opt/maven/bin/mvn -pl client -DskipTests compile\n- /opt/maven/bin/mvn -pl client -Dtest=ThreadSafeCookieStoreGetTest test --- .../org/asynchttpclient/cookie/ThreadSafeCookieStore.java | 4 ++++ .../cookie/ThreadSafeCookieStoreGetTest.java | 7 +++++++ 2 files changed, 11 insertions(+) diff --git a/client/src/main/java/org/asynchttpclient/cookie/ThreadSafeCookieStore.java b/client/src/main/java/org/asynchttpclient/cookie/ThreadSafeCookieStore.java index dff907091..8694ebe3b 100644 --- a/client/src/main/java/org/asynchttpclient/cookie/ThreadSafeCookieStore.java +++ b/client/src/main/java/org/asynchttpclient/cookie/ThreadSafeCookieStore.java @@ -63,6 +63,10 @@ public void add(Uri uri, Cookie cookie) { @Override public List get(Uri uri) { + requireNonNull(uri, "uri"); + if (cookieJar.isEmpty()) { + return Collections.emptyList(); + } return get(requestDomain(uri), requestPath(uri), uri.isSecured()); } diff --git a/client/src/test/java/org/asynchttpclient/cookie/ThreadSafeCookieStoreGetTest.java b/client/src/test/java/org/asynchttpclient/cookie/ThreadSafeCookieStoreGetTest.java index a8db3fd88..205f120fa 100644 --- a/client/src/test/java/org/asynchttpclient/cookie/ThreadSafeCookieStoreGetTest.java +++ b/client/src/test/java/org/asynchttpclient/cookie/ThreadSafeCookieStoreGetTest.java @@ -112,6 +112,13 @@ public void returnsMultipleDistinctCookiesAtSameDomainPath() { assertEquals(setOf("ALPHA=AV", "BETA=BV"), namesValues(store.get(uri))); } + @Test + public void returnsEmptyForEmptyStore() { + ThreadSafeCookieStore store = new ThreadSafeCookieStore(); + + assertTrue(store.get(Uri.create("http://www.foo.com/")).isEmpty()); + } + @Test public void perDomainCookieCountIsCappedUnderFlood() { ThreadSafeCookieStore store = new ThreadSafeCookieStore();