Commit bd3c723105 for openssl.org
commit bd3c7231050f7fc8a2858f2d6e54e734be41f829
Author: Matt Caswell <matt@openssl.org>
Date: Fri Feb 27 12:25:04 2026 +0000
Add a test to confirm that we get the expected error with HTTP
If we send HTTP directly over a TLS connection then we expect to receive
the SSL_R_HTTP_REQUEST error. So we add a test to confirm that we do.
Reviewed-by: Neil Horman <nhorman@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
MergeDate: Fri Mar 13 15:12:44 2026
(Merged from https://github.com/openssl/openssl/pull/30204)
diff --git a/test/sslapitest.c b/test/sslapitest.c
index f93c58ef7c..622e2a8469 100644
--- a/test/sslapitest.c
+++ b/test/sslapitest.c
@@ -14266,6 +14266,52 @@ end:
#endif /* !defined(OPENSSL_NO_EC) || !defined(OPENSSL_NO_DH) */
}
+/*
+ * Test that if we attempt to send HTTP to a TLS server that we get the expected
+ * failure reason code.
+ */
+static int test_http_verbs(int idx)
+{
+ SSL_CTX *sctx = NULL;
+ SSL *serverssl = NULL;
+ int testresult = 0;
+ const char *verbs[] = { "GET", "POST", "HEAD" };
+ const char *http_trailer = " / HTTP/1.0\r\n\r\n";
+ BIO *b = BIO_new(BIO_s_mem());
+
+ if (!TEST_true((unsigned int)idx < OSSL_NELEM(verbs)))
+ goto end;
+
+ if (!TEST_true(create_ssl_ctx_pair(libctx, TLS_server_method(),
+ NULL, 0, 0, &sctx, NULL, cert, privkey)))
+ goto end;
+
+ serverssl = SSL_new(sctx);
+ if (!TEST_ptr(serverssl))
+ goto end;
+
+ if (!TEST_int_gt(BIO_write(b, verbs[idx], (int)strlen(verbs[idx])), 0))
+ goto end;
+ if (!TEST_int_gt(BIO_write(b, http_trailer, (int)strlen(http_trailer)), 0))
+ goto end;
+ SSL_set_bio(serverssl, b, b);
+ b = NULL;
+
+ ERR_clear_error();
+ if (!TEST_int_le(SSL_accept(serverssl), 0))
+ goto end;
+ if (!TEST_int_eq(ERR_GET_REASON(ERR_get_error()), SSL_R_HTTP_REQUEST))
+ goto end;
+
+ testresult = 1;
+end:
+ SSL_free(serverssl);
+ SSL_CTX_free(sctx);
+ BIO_free(b);
+
+ return testresult;
+}
+
OPT_TEST_DECLARE_USAGE("certfile privkeyfile srpvfile tmpfile provider config dhfile\n")
int setup_tests(void)
@@ -14608,6 +14654,7 @@ int setup_tests(void)
#endif
ADD_ALL_TESTS(test_ssl_set_groups_unsupported_keyshare, 2);
ADD_TEST(test_ssl_conf_flags);
+ ADD_ALL_TESTS(test_http_verbs, 3);
return 1;
err: