Implement ALPN client-side
diff --git a/library/ssl_tls.c b/library/ssl_tls.c
index eb29371..0365b92 100644
--- a/library/ssl_tls.c
+++ b/library/ssl_tls.c
@@ -3919,9 +3919,28 @@
 #endif /* POLARSSL_SSL_SERVER_NAME_INDICATION */
 
 #if defined(POLARSSL_SSL_ALPN)
-void ssl_set_alpn_protocols( ssl_context *ssl, const char **protos )
+int ssl_set_alpn_protocols( ssl_context *ssl, const char **protos )
 {
+    size_t cur_len, tot_len;
+    const char **p;
+
+    /*
+     * "Empty strings MUST NOT be included and byte strings MUST NOT be
+     * truncated". Check lengths now rather than later.
+     */
+    tot_len = 0;
+    for( p = protos; *p != NULL; p++ )
+    {
+        cur_len = strlen( *p );
+        tot_len += cur_len;
+
+        if( cur_len == 0 || cur_len > 255 || tot_len > 65535 )
+            return( POLARSSL_ERR_SSL_BAD_INPUT_DATA );
+    }
+
     ssl->alpn_list = protos;
+
+    return( 0 );
 }
 
 const char *ssl_get_alpn_protocol( const ssl_context *ssl )