Skip to content

Commit c22cca9

Browse files
committed
Handle unchecked HTTP codec rejections
1 parent c8acffc commit c22cca9

3 files changed

Lines changed: 30 additions & 2 deletions

File tree

‎SimpleAPI/src/main/java/com/bencodez/simpleapi/servercomm/http/HttpBackendTransportConnector.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ public boolean send(JsonEnvelope envelope) {
284284
if (encoded == null) throw new IllegalArgumentException("HTTP wire codec returned no envelope");
285285
HttpTransportProtocol.validateEnvelope(encoded);
286286
}
287-
catch (IllegalArgumentException invalid) { return false; }
287+
catch (RuntimeException invalid) { return false; }
288288
synchronized (state) {
289289
if (!sendAdmissionOpen || !running.get()) return false;
290290
if (outgoing.size() >= HttpTransportProtocol.MAX_QUEUE) return false;

‎SimpleAPI/src/main/java/com/bencodez/simpleapi/servercomm/http/HttpProxyTransportServer.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ private boolean send(String serverId, String deliveryId, JsonEnvelope envelope,
322322
HttpTransportProtocol.validateEnvelope(envelope);
323323
validateForWire(envelope);
324324
}
325-
catch (IllegalArgumentException invalid) { return false; }
325+
catch (RuntimeException invalid) { return false; }
326326
BackendState backend;
327327
final String canonicalServerId = serverId;
328328
try { backend = backendState(canonicalServerId); }

‎SimpleAPI/src/test/java/com/bencodez/simpleapi/servercomm/http/HttpEnvelopeWireCodecTest.java‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,34 @@ void wireExpansionIsRejectedBeforeItCanBlockAQueue() throws Exception {
182182
}
183183
}
184184

185+
@Test
186+
void uncheckedCodecRejectionReturnsFalseAtBothSendBoundaries() throws Exception {
187+
HttpEnvelopeWireCodec rejecting = new HttpEnvelopeWireCodec() {
188+
@Override public JsonEnvelope encode(JsonEnvelope envelope) {
189+
throw new IllegalStateException("codec rejected envelope");
190+
}
191+
192+
@Override public JsonEnvelope decode(JsonEnvelope envelope) { return envelope; }
193+
};
194+
HttpTlsIdentity identity = HttpTlsIdentity.loadOrCreate(directory.resolve("rejecting-proxy"), "localhost");
195+
HttpEnrollmentAuthority authority = new HttpEnrollmentAuthority(identity, directory.resolve("rejecting-authority"));
196+
try (HttpProxyTransportServer server = server(identity, authority, directory.resolve("rejecting-outgoing"),
197+
rejecting, ignored -> { })) {
198+
assertFalse(server.send("backend-a", UUID.randomUUID().toString(), JsonEnvelope.builder("test").build()));
199+
server.start();
200+
HttpConnectionCode code = authority.createConnectionCode("backend-a", server.endpoint("localhost"),
201+
Duration.ofMinutes(5));
202+
Path credentials = directory.resolve("rejecting-client");
203+
HttpBackendTransportConnector.enroll(code, "backend-a", credentials);
204+
try (HttpBackendTransportConnector connector = new HttpBackendTransportConnector(credentials,
205+
ignored -> { }, rejecting)) {
206+
connector.start();
207+
assertTrue(connector.awaitFirstResponse(System.nanoTime() + TimeUnit.SECONDS.toNanos(8)));
208+
assertFalse(connector.send(JsonEnvelope.builder("test").build()));
209+
}
210+
}
211+
}
212+
185213
private static HttpProxyTransportServer server(HttpTlsIdentity identity, HttpEnrollmentAuthority authority,
186214
Path outgoing, HttpEnvelopeWireCodec codec,
187215
java.util.function.Consumer<HttpProxyTransportServer.ReceivedEnvelope> consumer) throws Exception {

0 commit comments

Comments
 (0)