Skip to content

Commit e28c854

Browse files
Don't NPE when a header is missing (#119)
1 parent c4d3933 commit e28c854

File tree

2 files changed

+8
-7
lines changed

2 files changed

+8
-7
lines changed

firebase-database/src/main/java/com/google/firebase/database/tubesock/WebSocket.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import java.nio.charset.Charset;
3030
import java.util.ArrayList;
3131
import java.util.HashMap;
32+
import java.util.Locale;
3233
import java.util.Map;
3334
import java.util.concurrent.Executors;
3435
import java.util.concurrent.ThreadFactory;
@@ -410,12 +411,13 @@ private void runReader() {
410411
handshake.verifyServerStatusLine(handshakeLines.get(0));
411412
handshakeLines.remove(0);
412413

413-
HashMap<String, String> headers = new HashMap<String, String>();
414+
HashMap<String, String> lowercaseHeaders = new HashMap<String, String>();
414415
for (String line : handshakeLines) {
415416
String[] keyValue = line.split(": ", 2);
416-
headers.put(keyValue[0], keyValue[1]);
417+
lowercaseHeaders.put(
418+
keyValue[0].toLowerCase(Locale.US), keyValue[1].toLowerCase(Locale.US));
417419
}
418-
handshake.verifyServerHandshakeHeaders(headers);
420+
handshake.verifyServerHandshakeHeaders(lowercaseHeaders);
419421

420422
writer.setOutput(output);
421423
receiver.setInput(input);

firebase-database/src/main/java/com/google/firebase/database/tubesock/WebSocketHandshake.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.nio.charset.Charset;
2020
import java.util.HashMap;
2121
import java.util.LinkedHashMap;
22-
import java.util.Locale;
2322
import java.util.Map;
2423

2524
class WebSocketHandshake {
@@ -107,11 +106,11 @@ public void verifyServerStatusLine(String statusLine) {
107106
}
108107
}
109108

110-
public void verifyServerHandshakeHeaders(HashMap<String, String> headers) {
111-
if (!headers.get("Upgrade").toLowerCase(Locale.US).equals("websocket")) {
109+
public void verifyServerHandshakeHeaders(HashMap<String, String> lowercaseHeaders) {
110+
if (!"websocket".equals(lowercaseHeaders.get("upgrade"))) {
112111
throw new WebSocketException(
113112
"connection failed: missing header field in server handshake: Upgrade");
114-
} else if (!headers.get("Connection").toLowerCase(Locale.US).equals("upgrade")) {
113+
} else if (!"upgrade".equals(lowercaseHeaders.get("connection"))) {
115114
throw new WebSocketException(
116115
"connection failed: missing header field in server handshake: Connection");
117116
}

0 commit comments

Comments
 (0)