Handle TLSv1.3 being disabled in clienthello test
authorMatt Caswell <matt@openssl.org>
Thu, 16 Mar 2017 15:09:59 +0000 (15:09 +0000)
committerMatt Caswell <matt@openssl.org>
Thu, 16 Mar 2017 15:37:41 +0000 (15:37 +0000)
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2968)

test/clienthellotest.c

index efdea94..e72ecc2 100644 (file)
 #define F5_WORKAROUND_MIN_MSG_LEN   0xff
 #define F5_WORKAROUND_MAX_MSG_LEN   0x200
 
-const char *sessionfile = NULL;
+static const char *sessionfile = NULL;
+/* Dummy ALPN protocols used to pad out the size of the ClientHello */
+static const char alpn_prots[] =
+    "0123456789012345678901234567890123456789012345678901234567890123456789"
+    "0123456789012345678901234567890123456789012345678901234567890123456789";
 
 static int test_client_hello(int currtest)
 {
@@ -62,6 +66,11 @@ static int test_client_hello(int currtest)
     BIO *sessbio = NULL;
     SSL_SESSION *sess = NULL;
 
+#ifdef OPENSSL_NO_TLS1_3
+    if (currtest == TEST_ADD_PADDING_AND_PSK)
+        return 1;
+#endif
+
     /*
      * For each test set up an SSL_CTX and SSL and see what ClientHello gets
      * produced when we try to connect
@@ -84,12 +93,16 @@ static int test_client_hello(int currtest)
         /*
          * Add lots of ciphersuites so that the ClientHello is at least
          * F5_WORKAROUND_MIN_MSG_LEN bytes long - meaning padding will be
-         * needed.
+         * needed. Also add some dummy ALPN protocols in case we still don't
+         * have enough.
          * In the padding not needed case we assume the test will pass, but then
          * set testresult to 0 if we see the padding extension.
          */
         if (currtest == TEST_ADD_PADDING
-                && !SSL_CTX_set_cipher_list(ctx, "ALL"))
+                && (!SSL_CTX_set_cipher_list(ctx, "ALL")
+                    || SSL_CTX_set_alpn_protos(ctx,
+                                               (unsigned char *)alpn_prots,
+                                               sizeof(alpn_prots) - 1)))
             goto end;
         else if (currtest == TEST_PADDING_NOT_NEEDED)
             testresult = 1;
@@ -224,7 +237,7 @@ end:
 int test_main(int argc, char *argv[])
 {
     if (argc != 2)
-        return 0;
+        return EXIT_FAILURE;
 
     sessionfile = argv[1];