@@ -120,6 +120,32 @@ int main(int argc, char **argv)
120120 EXPECT_SUCCESS (s2n_connection_free (server_conn ));
121121 };
122122
123+ /* Send and receive maximum-sized alpn */
124+ {
125+ const uint8_t max_size = UINT8_MAX ;
126+
127+ DEFER_CLEANUP (struct s2n_connection * client = s2n_connection_new (S2N_CLIENT ),
128+ s2n_connection_ptr_free );
129+ EXPECT_NOT_NULL (client );
130+ EXPECT_NULL (s2n_get_application_protocol (client ));
131+
132+ DEFER_CLEANUP (struct s2n_connection * server = s2n_connection_new (S2N_SERVER ),
133+ s2n_connection_ptr_free );
134+ EXPECT_NOT_NULL (server );
135+ memset (server -> application_protocol , 'a' , sizeof (server -> application_protocol ) - 1 );
136+
137+ DEFER_CLEANUP (struct s2n_stuffer stuffer = { 0 }, s2n_stuffer_free );
138+ EXPECT_SUCCESS (s2n_stuffer_growable_alloc (& stuffer , 0 ));
139+ EXPECT_SUCCESS (s2n_server_alpn_extension .send (server , & stuffer ));
140+ EXPECT_SUCCESS (s2n_server_alpn_extension .recv (client , & stuffer ));
141+ EXPECT_EQUAL (s2n_stuffer_data_available (& stuffer ), 0 );
142+
143+ const char * client_alpn = s2n_get_application_protocol (client );
144+ EXPECT_NOT_NULL (client_alpn );
145+ EXPECT_EQUAL (strlen (client_alpn ), max_size );
146+ EXPECT_STRING_EQUAL (client_alpn , server -> application_protocol );
147+ };
148+
123149 END_TEST ();
124150 return 0 ;
125151}
0 commit comments