@@ -2304,6 +2304,83 @@ static int test_wolfSSL_set_cipher_list_tls13_with_version(void)
23042304 return EXPECT_RESULT();
23052305}
23062306
2307+ static int test_wolfSSL_set_alpn_protos_default_fails(void)
2308+ {
2309+ EXPECT_DECLS;
2310+ #if defined(HAVE_ALPN) && defined(OPENSSL_EXTRA) && !defined(NO_BIO) && \
2311+ !defined(NO_WOLFSSL_CLIENT)
2312+ {
2313+ WOLFSSL_CTX* ctx = NULL;
2314+ WOLFSSL* ssl = NULL;
2315+ unsigned char p[] = { 6, 's', 'p', 'd', 'y', '/', '3' };
2316+ TLSX* ext = NULL;
2317+ ALPN* alpn = NULL;
2318+
2319+ ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method()));
2320+ ExpectNotNull(ssl = wolfSSL_new(ctx));
2321+ #ifdef WOLFSSL_ERROR_CODE_OPENSSL
2322+ ExpectIntEQ(wolfSSL_set_alpn_protos(ssl, p, sizeof(p)), 0);
2323+ #else
2324+ ExpectIntEQ(wolfSSL_set_alpn_protos(ssl, p, sizeof(p)),
2325+ WOLFSSL_SUCCESS);
2326+ #endif
2327+ if (ssl != NULL) {
2328+ ext = TLSX_Find(ssl->extensions,
2329+ TLSX_APPLICATION_LAYER_PROTOCOL);
2330+ ExpectNotNull(ext);
2331+ if (ext != NULL) {
2332+ alpn = (ALPN*)ext->data;
2333+ ExpectNotNull(alpn);
2334+ if (alpn != NULL) {
2335+ ExpectTrue((alpn->options
2336+ & WOLFSSL_ALPN_FAILED_ON_MISMATCH) != 0);
2337+ ExpectIntEQ(alpn->options
2338+ & WOLFSSL_ALPN_CONTINUE_ON_MISMATCH, 0);
2339+ }
2340+ }
2341+ }
2342+ wolfSSL_free(ssl);
2343+ wolfSSL_CTX_free(ctx);
2344+ }
2345+ #if !defined(NO_WOLFSSL_SERVER) && !defined(WOLFSSL_NO_TLS12) && \
2346+ !defined(SINGLE_THREADED) && defined(HAVE_MANUAL_MEMIO_TESTS_DEPENDENCIES)
2347+ {
2348+ struct test_memio_ctx test_ctx;
2349+ WOLFSSL_CTX *ctx_c = NULL, *ctx_s = NULL;
2350+ WOLFSSL *ssl_c = NULL, *ssl_s = NULL;
2351+ unsigned char client_protos[] = { 6, 's', 'p', 'd', 'y', '/', '3' };
2352+ const char* server_protos = "http/2";
2353+ WOLFSSL_ALERT_HISTORY h;
2354+
2355+ XMEMSET(&test_ctx, 0, sizeof(test_ctx));
2356+ ExpectIntEQ(test_memio_setup(&test_ctx, &ctx_c, &ctx_s, &ssl_c, &ssl_s,
2357+ wolfTLSv1_2_client_method, wolfTLSv1_2_server_method), 0);
2358+
2359+ #ifdef WOLFSSL_ERROR_CODE_OPENSSL
2360+ ExpectIntEQ(wolfSSL_set_alpn_protos(ssl_c, client_protos,
2361+ sizeof(client_protos)), 0);
2362+ #else
2363+ ExpectIntEQ(wolfSSL_set_alpn_protos(ssl_c, client_protos,
2364+ sizeof(client_protos)), WOLFSSL_SUCCESS);
2365+ #endif
2366+ ExpectIntEQ(wolfSSL_UseALPN(ssl_s, (char*)server_protos,
2367+ (word32)XSTRLEN(server_protos),
2368+ WOLFSSL_ALPN_FAILED_ON_MISMATCH), WOLFSSL_SUCCESS);
2369+
2370+ ExpectIntNE(test_memio_do_handshake(ssl_c, ssl_s, 10, NULL), 0);
2371+ ExpectIntEQ(wolfSSL_get_alert_history(ssl_s, &h), WOLFSSL_SUCCESS);
2372+ ExpectIntEQ(h.last_tx.code, no_application_protocol);
2373+ ExpectIntEQ(h.last_tx.level, alert_fatal);
2374+
2375+ wolfSSL_free(ssl_c);
2376+ wolfSSL_free(ssl_s);
2377+ wolfSSL_CTX_free(ctx_c);
2378+ wolfSSL_CTX_free(ctx_s);
2379+ }
2380+ #endif
2381+ #endif
2382+ return EXPECT_RESULT();
2383+ }
23072384
23082385static int test_wolfSSL_CTX_use_certificate(void)
23092386{
@@ -37248,6 +37325,7 @@ TEST_CASE testCases[] = {
3724837325 TEST_DECL(test_wolfSSL_set_cipher_list_tls13_keeps_tls12),
3724937326 TEST_DECL(test_wolfSSL_set_cipher_list_tls12_with_version),
3725037327 TEST_DECL(test_wolfSSL_set_cipher_list_tls13_with_version),
37328+ TEST_DECL(test_wolfSSL_set_alpn_protos_default_fails),
3725137329 TEST_DECL(test_wolfSSL_CTX_use_certificate),
3725237330 TEST_DECL(test_wolfSSL_CTX_use_certificate_file),
3725337331 TEST_DECL(test_wolfSSL_CTX_use_certificate_buffer),
0 commit comments