From 03e498400b02132989aa4f009db8096f63fa6365 Mon Sep 17 00:00:00 2001 From: Sanha Lee Date: Mon, 3 Jan 2022 20:06:33 +0900 Subject: [PATCH] Fix NPE in SkipPatternSampler (#2089) --- .../brave/instrument/web/SkipPatternSampler.java | 4 ++++ .../instrument/web/SkipPatternSamplerTests.java | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/spring-cloud-sleuth-brave/src/main/java/org/springframework/cloud/sleuth/brave/instrument/web/SkipPatternSampler.java b/spring-cloud-sleuth-brave/src/main/java/org/springframework/cloud/sleuth/brave/instrument/web/SkipPatternSampler.java index 1aec8fc78..8b1545c6e 100644 --- a/spring-cloud-sleuth-brave/src/main/java/org/springframework/cloud/sleuth/brave/instrument/web/SkipPatternSampler.java +++ b/spring-cloud-sleuth-brave/src/main/java/org/springframework/cloud/sleuth/brave/instrument/web/SkipPatternSampler.java @@ -34,6 +34,10 @@ abstract class SkipPatternSampler implements SamplerFunction { @Override public final Boolean trySample(HttpRequest request) { String url = request.path(); + if (url == null) { + return null; + } + boolean shouldSkip = pattern().matcher(url).matches(); if (shouldSkip) { return false; diff --git a/spring-cloud-sleuth-brave/src/test/java/org/springframework/cloud/sleuth/brave/instrument/web/SkipPatternSamplerTests.java b/spring-cloud-sleuth-brave/src/test/java/org/springframework/cloud/sleuth/brave/instrument/web/SkipPatternSamplerTests.java index 7c8325332..047563a57 100644 --- a/spring-cloud-sleuth-brave/src/test/java/org/springframework/cloud/sleuth/brave/instrument/web/SkipPatternSamplerTests.java +++ b/spring-cloud-sleuth-brave/src/test/java/org/springframework/cloud/sleuth/brave/instrument/web/SkipPatternSamplerTests.java @@ -86,4 +86,16 @@ public class SkipPatternSamplerTests { then(sampler.trySample(this.request)).isFalse(); } + @Test + public void should_delegate_sampling_decision_if_path_is_null() { + BDDMockito.given(this.request.path()).willReturn(null); + SkipPatternSampler sampler = new SkipPatternSampler() { + @Override + Pattern getPattern() { + return Pattern.compile("foo"); + } + }; + + then(sampler.trySample(this.request)).isNull(); + } }