Fix long SNI lengths in test/handshake_helper.c
authorBenjamin Kaduk <bkaduk@akamai.com>
Fri, 1 Sep 2017 17:37:05 +0000 (12:37 -0500)
committerBenjamin Kaduk <kaduk@mit.edu>
Fri, 1 Sep 2017 17:44:58 +0000 (12:44 -0500)
If the server_name extension is long enough to require two bytes to
hold the length of either field, the test suite would not decode
the length properly.  Using the PACKET_ APIs would have avoided this,
but it was desired to avoid using private APIs in this part of the
test suite, to keep ourselves honest.

Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/4318)

test/handshake_helper.c

index 4ec3867fe3f980ba1ba6508159b75c1d3d0899bd..dc020d90273a1ee6cf1ef9bb252effcf9c9635ea 100644 (file)
@@ -153,7 +153,7 @@ static int early_select_server_ctx(SSL *s, void *arg, int ignore)
         remaining <= 2)
         return 0;
     /* Extract the length of the supplied list of names. */
-    len = (*(p++) << 1);
+    len = (*(p++) << 8);
     len += *(p++);
     if (len + 2 != remaining)
         return 0;
@@ -168,7 +168,7 @@ static int early_select_server_ctx(SSL *s, void *arg, int ignore)
     /* Now we can finally pull out the byte array with the actual hostname. */
     if (remaining <= 2)
         return 0;
-    len = (*(p++) << 1);
+    len = (*(p++) << 8);
     len += *(p++);
     if (len + 2 > remaining)
         return 0;