From 3858559c649f050a95fbc15942860528eb6034dd Mon Sep 17 00:00:00 2001 From: Gabe Kassel Date: Tue, 23 May 2023 16:07:42 -0700 Subject: [PATCH] Catch IllegalArgumentException exception --- .../io/grpc/okhttp/OkHttpProtocolNegotiator.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java index d09d6ccceddf..0356cbb9fde8 100644 --- a/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java +++ b/okhttp/src/main/java/io/grpc/okhttp/OkHttpProtocolNegotiator.java @@ -248,8 +248,19 @@ protected void configureTlsExtensions( SET_USE_SESSION_TICKETS.invokeOptionalWithoutCheckedException(sslSocket, true); } if (SET_SERVER_NAMES != null && SNI_HOST_NAME != null) { - SET_SERVER_NAMES - .invoke(sslParams, Collections.singletonList(SNI_HOST_NAME.newInstance(hostname))); + try { + // SSLParameters.setServerNames(List) may throw IllegalArgumentException + // if an IP address that contains special characters (e.g. % for scope) is passed. + SET_SERVER_NAMES + .invoke(sslParams, Collections.singletonList(SNI_HOST_NAME.newInstance(hostname))); + } catch (InvocationTargetException e) { + Throwable targetException = e.getTargetException(); + if (targetException instanceof IllegalArgumentException) { + SET_HOSTNAME.invokeOptionalWithoutCheckedException(sslSocket, hostname); + } else { + throw e; + } + } } else { SET_HOSTNAME.invokeOptionalWithoutCheckedException(sslSocket, hostname); }