diff options
author | Jack Lloyd <[email protected]> | 2015-11-13 14:16:50 -0500 |
---|---|---|
committer | Jack Lloyd <[email protected]> | 2015-11-13 14:16:50 -0500 |
commit | cf8365192fe871fecac7acff5236b7d4d97d1dba (patch) | |
tree | 648ad00453d7d51132fc33f78550fe8a6339042c | |
parent | 406c57f09eac849c10807b74c8e7ba051a6a5c2c (diff) |
The TLS test for corrupted data was too strict in requiring that
the first block satisfy the request, since it was possible another
record header appeared in some appended corrupted data.
-rw-r--r-- | src/tests/unit_tls.cpp | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/src/tests/unit_tls.cpp b/src/tests/unit_tls.cpp index a5ec9e0d5..8e53fc3db 100644 --- a/src/tests/unit_tls.cpp +++ b/src/tests/unit_tls.cpp @@ -176,6 +176,8 @@ Test::Result test_tls_handshake(Botan::TLS::Protocol_Version offer_version, Test::Result result(offer_version.to_string()); + result.start_timer(); + for(size_t r = 1; r <= 4; ++r) { bool handshake_done = false; @@ -185,7 +187,6 @@ Test::Result test_tls_handshake(Botan::TLS::Protocol_Version offer_version, auto handshake_complete = [&](const Botan::TLS::Session& session) -> bool { handshake_done = true; - result.test_note("Session established " + session.version().to_string() + " " + session.ciphersuite().to_string() + " " + Botan::hex_encode(session.session_id())); @@ -196,7 +197,9 @@ Test::Result test_tls_handshake(Botan::TLS::Protocol_Version offer_version, " got " + session.version().to_string()); } - return true; + if(r <= 2) + return true; + return false; }; auto next_protocol_chooser = [&](std::vector<std::string> protos) { @@ -288,22 +291,19 @@ Test::Result test_tls_handshake(Botan::TLS::Protocol_Version offer_version, if(corrupt_server_data) { - try - { - input = Test::mutate_vec(input, true); - size_t needed = server.received_data(input.data(), input.size()); + input = Test::mutate_vec(input, true); + size_t needed = server.received_data(input.data(), input.size()); - if(needed > 0 && result.test_lt("Never requesting more than max protocol len", needed, 18*1024)) - { - input.resize(needed); - Test::rng().randomize(input.data(), input.size()); - needed = server.received_data(input.data(), input.size()); - result.test_eq("no more data needed now", needed, 0); - } - } - catch(std::exception& e) + size_t total_consumed = needed; + + while(needed > 0 && + result.test_lt("Never requesting more than max protocol len", needed, 18*1024) && + result.test_lt("Total requested is readonable", total_consumed, 128*1024)) { - result.test_note("corruption caused server exception"); + input.resize(needed); + Test::rng().randomize(input.data(), input.size()); + needed = server.received_data(input.data(), input.size()); + total_consumed += needed; } } else @@ -322,22 +322,18 @@ Test::Result test_tls_handshake(Botan::TLS::Protocol_Version offer_version, if(corrupt_client_data) { - try - { - input = Test::mutate_vec(input, true); - size_t needed = client.received_data(input.data(), input.size()); + input = Test::mutate_vec(input, true); + size_t needed = client.received_data(input.data(), input.size()); - if(needed > 0 && result.test_lt("Never requesting more than max protocol len", needed, 18*1024)) - { - input.resize(needed); - Test::rng().randomize(input.data(), input.size()); - needed = client.received_data(input.data(), input.size()); - result.test_eq("no more data needed now", needed, 0); - } - } - catch(std::exception& e) + size_t total_consumed = 0; + + while(needed > 0 && result.test_lt("Never requesting more than max protocol len", needed, 18*1024)) { - result.test_note("corruption caused client exception"); + input.resize(needed); + Test::rng().randomize(input.data(), input.size()); + needed = client.received_data(input.data(), input.size()); + result.test_eq("no more data needed now", needed, 0); + total_consumed += needed; } } else @@ -397,6 +393,8 @@ Test::Result test_tls_handshake(Botan::TLS::Protocol_Version offer_version, } } + result.end_timer(); + return result; } @@ -413,6 +411,8 @@ Test::Result test_dtls_handshake(Botan::TLS::Protocol_Version offer_version, Test::Result result(offer_version.to_string()); + result.start_timer(); + for(size_t r = 1; r <= 2; ++r) { bool handshake_done = false; @@ -425,6 +425,7 @@ Test::Result test_dtls_handshake(Botan::TLS::Protocol_Version offer_version, result.test_failure("Offered " + offer_version.to_string() + " got " + session.version().to_string()); } + return true; }; @@ -639,6 +640,7 @@ Test::Result test_dtls_handshake(Botan::TLS::Protocol_Version offer_version, } } + result.end_timer(); return result; } |