Add a test for unrecognised record types

We should fail if we receive an unrecognised record type

Reviewed-by: Tim Hudson <tjh@openssl.org>
This commit is contained in:
Matt Caswell 2016-11-02 09:41:37 +00:00
parent 436a2a0179
commit 1f3e70a450
2 changed files with 51 additions and 3 deletions

View File

@ -39,7 +39,11 @@ my $content_type = TLSProxy::Record::RT_APPLICATION_DATA;
my $inject_recs_num = 1;
$proxy->serverflags("-tls1_2");
$proxy->start() or plan skip_all => "Unable to start up Proxy for tests";
plan tests => 9;
my $num_tests = 10;
if (!disabled("tls1_1")) {
$num_tests++;
}
plan tests => $num_tests;
ok(TLSProxy::Message->fail(), "Out of context empty records test");
#Test 2: Injecting in context empty records should succeed
@ -116,6 +120,23 @@ $proxy->clear();
$proxy->serverflags("-tls1_2");
$proxy->start();
ok(TLSProxy::Message->fail(), "Alert before SSLv2 ClientHello test");
#Unregcognised record type tests
#Test 10: Sending an unrecognised record type in TLS1.2 should fail
$proxy->clear();
$proxy->filter(\&add_unknown_record_type);
$proxy->start();
ok(TLSProxy::Message->fail(), "Unrecognised record type in TLS1.2");
#Test 11: Sending an unrecognised record type in TLS1.1 should fail
if (!disabled("tls1_1")) {
$proxy->clear();
$proxy->clientflags("-tls1_1");
$proxy->start();
ok(TLSProxy::Message->fail(), "Unrecognised record type in TLS1.1");
}
sub add_empty_recs_filter
{
my $proxy = shift;
@ -342,3 +363,28 @@ sub add_sslv2_filter
}
}
sub add_unknown_record_type
{
my $proxy = shift;
# We'll change a record after the initial version neg has taken place
if ($proxy->flight != 2) {
return;
}
my $lastrec = ${$proxy->record_list}[-1];
my $record = TLSProxy::Record->new(
2,
TLSProxy::Record::RT_UNKNOWN,
$lastrec->version(),
1,
0,
1,
1,
"X",
"X"
);
unshift @{$proxy->record_list}, $record;
}

View File

@ -22,14 +22,16 @@ use constant {
RT_APPLICATION_DATA => 23,
RT_HANDSHAKE => 22,
RT_ALERT => 21,
RT_CCS => 20
RT_CCS => 20,
RT_UNKNOWN => 100
};
my %record_type = (
RT_APPLICATION_DATA, "APPLICATION DATA",
RT_HANDSHAKE, "HANDSHAKE",
RT_ALERT, "ALERT",
RT_CCS, "CCS"
RT_CCS, "CCS",
RT_UNKNOWN, "UNKNOWN"
);
use constant {