Skip to content

Commit 72f2f59

Browse files
committed
Guard against incorrect values early
1 parent d9e5f5b commit 72f2f59

1 file changed

Lines changed: 17 additions & 0 deletions

File tree

  • dogstatsd-http-forwarder/src/main/java/com/datadoghq/dogstatsd/http/forwarder

dogstatsd-http-forwarder/src/main/java/com/datadoghq/dogstatsd/http/forwarder/Forwarder.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
import java.net.http.HttpResponse;
1818
import java.time.Duration;
1919
import java.util.Map;
20+
import java.util.Objects;
2021
import java.util.Random;
2122
import java.util.logging.Level;
2223
import java.util.logging.Logger;
24+
import java.util.regex.Pattern;
2325

2426
/**
2527
* An HTTP forwarder that delivers DogStatsD HTTP payloads to a remote endpoint.
@@ -89,6 +91,8 @@ public void run() {
8991
* ({@link WhenFull#BLOCK} mode only)
9092
*/
9193
public void send(URI url, byte[] payload) throws InterruptedException {
94+
Objects.requireNonNull(url, "url");
95+
Objects.requireNonNull(payload, "payload");
9296
queue.add(new Payload(url, payload));
9397
}
9498

@@ -171,6 +175,7 @@ void backoff() throws InterruptedException {
171175
* @param data the local-data string, or {@code null} to omit the header
172176
*/
173177
public void setLocalData(String data) {
178+
validateHeaderValue(data);
174179
logger.log(Level.INFO, "using local data: {0}", data);
175180
localData = data;
176181
}
@@ -185,7 +190,19 @@ public void setLocalData(String data) {
185190
* @param data the external-data string, or {@code null} to omit the header
186191
*/
187192
public void setExternalData(String data) {
193+
validateHeaderValue(data);
188194
logger.log(Level.INFO, "using external data: {0}", data);
189195
externalData = data;
190196
}
197+
198+
private static final Pattern validHeaderValue = Pattern.compile("[\\t\\x20-\\x7E\\x80-\\xFF]*");
199+
200+
private static void validateHeaderValue(String value) {
201+
if (value == null) {
202+
return;
203+
}
204+
if (!validHeaderValue.matcher(value).matches()) {
205+
throw new IllegalArgumentException("invalid character");
206+
}
207+
}
191208
}

0 commit comments

Comments
 (0)