Skip to content

Commit 28c213f

Browse files
steveisokSteve Pfister
and
Steve Pfister
authored
Make the lookup for getApplicationProtocol optional (#53001)
* Make the lookup for getApplicationProtocol optional The method getApplicationProtocol in javax.net.ssl.SSLEngine is only supported on API level 29 and above, so running on older devices would result in a crash. This change makes the initial method lookup optional and AndroidCryptoNative_SSLStreamGetApplicationProtocol in pal_sslstream.c will error if it is not supported. Fixes #52965 * Feedback Co-authored-by: Steve Pfister <[email protected]>
1 parent 81a9e9e commit 28c213f

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

src/libraries/Native/Unix/System.Security.Cryptography.Native.Android/pal_jni.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -967,7 +967,7 @@ JNI_OnLoad(JavaVM *vm, void *reserved)
967967
g_SSLEngine = GetClassGRef(env, "javax/net/ssl/SSLEngine");
968968
g_SSLEngineBeginHandshake = GetMethod(env, false, g_SSLEngine, "beginHandshake", "()V");
969969
g_SSLEngineCloseOutbound = GetMethod(env, false, g_SSLEngine, "closeOutbound", "()V");
970-
g_SSLEngineGetApplicationProtocol = GetMethod(env, false, g_SSLEngine, "getApplicationProtocol", "()Ljava/lang/String;");
970+
g_SSLEngineGetApplicationProtocol = GetOptionalMethod(env, false, g_SSLEngine, "getApplicationProtocol", "()Ljava/lang/String;");
971971
g_SSLEngineGetHandshakeStatus = GetMethod(env, false, g_SSLEngine, "getHandshakeStatus", "()Ljavax/net/ssl/SSLEngineResult$HandshakeStatus;");
972972
g_SSLEngineGetSession = GetMethod(env, false, g_SSLEngine, "getSession", "()Ljavax/net/ssl/SSLSession;");
973973
g_SSLEngineGetSSLParameters = GetMethod(env, false, g_SSLEngine, "getSSLParameters", "()Ljavax/net/ssl/SSLParameters;");

src/libraries/Native/Unix/System.Security.Cryptography.Native.Android/pal_sslstream.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -652,6 +652,12 @@ void AndroidCryptoNative_SSLStreamRelease(SSLStream* sslStream)
652652

653653
int32_t AndroidCryptoNative_SSLStreamGetApplicationProtocol(SSLStream* sslStream, uint8_t* out, int32_t* outLen)
654654
{
655+
if (g_SSLEngineGetApplicationProtocol == NULL)
656+
{
657+
// SSLEngine.getApplicationProtocol() is only supported from API level 29 and above
658+
return FAIL;
659+
}
660+
655661
abort_if_invalid_pointer_argument (sslStream);
656662
abort_if_invalid_pointer_argument (outLen);
657663

0 commit comments

Comments
 (0)