Skip to content

Commit 57891fe

Browse files
authored
Crash early if any interceptor is null. (square#3555)
Closes: square#3514
1 parent 36bd68a commit 57891fe

File tree

3 files changed

+53
-1
lines changed

3 files changed

+53
-1
lines changed

okhttp-tests/src/test/java/okhttp3/OkHttpClientTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,46 @@ public final class OkHttpClientTest {
127127
OkHttpClient clientB = TestUtil.defaultClient();
128128
assertEquals(clientA.certificatePinner(), clientB.certificatePinner());
129129
}
130+
131+
@Test public void nullInterceptor() {
132+
OkHttpClient.Builder builder = new OkHttpClient.Builder();
133+
try {
134+
builder.addInterceptor(null);
135+
fail();
136+
} catch (IllegalArgumentException expected) {
137+
assertEquals("interceptor == null", expected.getMessage());
138+
}
139+
}
140+
141+
@Test public void nullNetworkInterceptor() {
142+
OkHttpClient.Builder builder = new OkHttpClient.Builder();
143+
try {
144+
builder.addNetworkInterceptor(null);
145+
fail();
146+
} catch (IllegalArgumentException expected) {
147+
assertEquals("interceptor == null", expected.getMessage());
148+
}
149+
}
150+
151+
@Test public void nullInterceptorInList() {
152+
OkHttpClient.Builder builder = new OkHttpClient.Builder();
153+
builder.interceptors().add(null);
154+
try {
155+
builder.build();
156+
fail();
157+
} catch (IllegalStateException expected) {
158+
assertEquals("Null interceptor: [null]", expected.getMessage());
159+
}
160+
}
161+
162+
@Test public void nullNetworkInterceptorInList() {
163+
OkHttpClient.Builder builder = new OkHttpClient.Builder();
164+
builder.networkInterceptors().add(null);
165+
try {
166+
builder.build();
167+
fail();
168+
} catch (IllegalStateException expected) {
169+
assertEquals("Null network interceptor: [null]", expected.getMessage());
170+
}
171+
}
130172
}

okhttp/src/main/java/okhttp3/CertificatePinner.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,8 @@ List<Pin> findMatchingPins(String hostname) {
226226
}
227227

228228
/** Returns a certificate pinner that uses {@code certificateChainCleaner}. */
229-
CertificatePinner withCertificateChainCleaner(CertificateChainCleaner certificateChainCleaner) {
229+
CertificatePinner withCertificateChainCleaner(
230+
@Nullable CertificateChainCleaner certificateChainCleaner) {
230231
return equal(this.certificateChainCleaner, certificateChainCleaner)
231232
? this
232233
: new CertificatePinner(pins, certificateChainCleaner);

okhttp/src/main/java/okhttp3/OkHttpClient.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,13 @@ public OkHttpClient() {
268268
this.readTimeout = builder.readTimeout;
269269
this.writeTimeout = builder.writeTimeout;
270270
this.pingInterval = builder.pingInterval;
271+
272+
if (interceptors.contains(null)) {
273+
throw new IllegalStateException("Null interceptor: " + interceptors);
274+
}
275+
if (networkInterceptors.contains(null)) {
276+
throw new IllegalStateException("Null network interceptor: " + networkInterceptors);
277+
}
271278
}
272279

273280
private X509TrustManager systemDefaultTrustManager() {
@@ -862,6 +869,7 @@ public List<Interceptor> interceptors() {
862869
}
863870

864871
public Builder addInterceptor(Interceptor interceptor) {
872+
if (interceptor == null) throw new IllegalArgumentException("interceptor == null");
865873
interceptors.add(interceptor);
866874
return this;
867875
}
@@ -876,6 +884,7 @@ public List<Interceptor> networkInterceptors() {
876884
}
877885

878886
public Builder addNetworkInterceptor(Interceptor interceptor) {
887+
if (interceptor == null) throw new IllegalArgumentException("interceptor == null");
879888
networkInterceptors.add(interceptor);
880889
return this;
881890
}

0 commit comments

Comments
 (0)