@@ -120,6 +120,32 @@ int main(int argc, char **argv)
120
120
EXPECT_SUCCESS (s2n_connection_free (server_conn ));
121
121
};
122
122
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
+
123
149
END_TEST ();
124
150
return 0 ;
125
151
}
0 commit comments