aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJack Lloyd <jack@randombit.net>2018-04-07 13:38:58 -0400
committerJack Lloyd <jack@randombit.net>2018-04-07 13:38:58 -0400
commitf70ca7111ef3d6688ae77ded1b20a48497aa2936 (patch)
tree325538984a34516577e528ec0bf7199389b091ba /src
parent7df69ab04ba5f2944ac3135b444c3b103aaa3f80 (diff)
parenta96d1ca450a9cadea8157f3295a970af1f16a58f (diff)
Merge GH #1525 Allow tests to run cleanly under UbSan by default
Diffstat (limited to 'src')
-rw-r--r--src/build-data/buildh.in4
-rw-r--r--src/tests/main.cpp4
-rw-r--r--src/tests/test_dl_group.cpp2
-rw-r--r--src/tests/test_ffi.cpp2
-rw-r--r--src/tests/tests.h17
-rw-r--r--src/tests/unit_ecdsa.cpp2
6 files changed, 21 insertions, 10 deletions
diff --git a/src/build-data/buildh.in b/src/build-data/buildh.in
index d42e85ac4..807b6f479 100644
--- a/src/build-data/buildh.in
+++ b/src/build-data/buildh.in
@@ -52,6 +52,10 @@
#define BOTAN_BUILD_COMPILER_IS_%{cc_macro}
+%{for sanitizer_types}
+#define BOTAN_HAS_SANITIZER_%{i|upper}
+%{endfor}
+
#define BOTAN_TARGET_ARCH_IS_%{arch|upper}
%{if endian}
#define BOTAN_TARGET_CPU_IS_%{endian|upper}_ENDIAN
diff --git a/src/tests/main.cpp b/src/tests/main.cpp
index 5cf4e4fe3..0e0360783 100644
--- a/src/tests/main.cpp
+++ b/src/tests/main.cpp
@@ -60,7 +60,7 @@ int main(int argc, char* argv[])
{
const std::string arg_spec =
"botan-test --verbose --help --data-dir= --pkcs11-lib= --provider= "
- "--log-success --abort-on-first-fail --avoid-undefined "
+ "--log-success --abort-on-first-fail --no-avoid-undefined "
"--run-long-tests --run-online-tests --test-runs=1 --drbg-seed= "
"*suites";
@@ -85,7 +85,7 @@ int main(int argc, char* argv[])
parser.flag_set("run-online-tests"),
parser.flag_set("run-long-tests"),
parser.flag_set("abort-on-first-fail"),
- parser.flag_set("avoid-undefined"));
+ parser.flag_set("no-avoid-undefined"));
#if defined(BOTAN_HAS_OPENSSL)
if(opts.provider().empty() || opts.provider() == "openssl")
diff --git a/src/tests/test_dl_group.cpp b/src/tests/test_dl_group.cpp
index 10a7e3bc6..064cb2221 100644
--- a/src/tests/test_dl_group.cpp
+++ b/src/tests/test_dl_group.cpp
@@ -44,7 +44,7 @@ class DL_Group_Tests final : public Test
"DL_Group uninitialized",
[]() { Botan::DL_Group dl; dl.get_p(); });
- if(Test::avoid_undefined_behavior() == false)
+ if(Test::no_avoid_undefined_behavior())
{
result.test_throws("Bad generator param",
"Invalid argument DL_Group unknown PrimeType",
diff --git a/src/tests/test_ffi.cpp b/src/tests/test_ffi.cpp
index 58b9852a0..d5627a45f 100644
--- a/src/tests/test_ffi.cpp
+++ b/src/tests/test_ffi.cpp
@@ -842,7 +842,7 @@ class FFI_Unit_Tests final : public Test
// delete of null is ok/ignored
TEST_FFI_RC(0, botan_hash_destroy, (nullptr));
- if(Test::avoid_undefined_behavior() == false)
+ if(Test::no_avoid_undefined_behavior())
{
// Confirm that botan_x_destroy checks the argument type
botan_mp_t mp;
diff --git a/src/tests/tests.h b/src/tests/tests.h
index 0c63797fa..8551e4e4d 100644
--- a/src/tests/tests.h
+++ b/src/tests/tests.h
@@ -62,7 +62,7 @@ class Test_Options
bool run_online_tests,
bool run_long_tests,
bool abort_on_first_fail,
- bool avoid_undefined) :
+ bool no_avoid_undefined) :
m_requested_tests(requested_tests),
m_data_dir(data_dir),
m_pkcs11_lib(pkcs11_lib),
@@ -73,7 +73,7 @@ class Test_Options
m_run_online_tests(run_online_tests),
m_run_long_tests(run_long_tests),
m_abort_on_first_fail(abort_on_first_fail),
- m_avoid_undefined(avoid_undefined)
+ m_no_avoid_undefined(no_avoid_undefined)
{}
const std::vector<std::string>& requested_tests() const
@@ -97,7 +97,14 @@ class Test_Options
bool abort_on_first_fail() const { return m_abort_on_first_fail; }
- bool avoid_undefined_behavior() const { return m_avoid_undefined; }
+ bool no_avoid_undefined_behavior() const
+ {
+#if defined(BOTAN_HAS_SANITIZER_UNDEFINED)
+ return m_no_avoid_undefined;
+#else
+ return true;
+#endif
+ }
private:
std::vector<std::string> m_requested_tests;
@@ -110,7 +117,7 @@ class Test_Options
bool m_run_online_tests;
bool m_run_long_tests;
bool m_abort_on_first_fail;
- bool m_avoid_undefined;
+ bool m_no_avoid_undefined;
};
/*
@@ -466,7 +473,7 @@ class Test
static void set_test_rng(std::unique_ptr<Botan::RandomNumberGenerator> rng);
- static bool avoid_undefined_behavior() { return m_opts.avoid_undefined_behavior(); }
+ static bool no_avoid_undefined_behavior() { return m_opts.no_avoid_undefined_behavior(); }
static bool log_success() { return m_opts.log_success(); }
static bool run_online_tests() { return m_opts.run_online_tests(); }
static bool run_long_tests() { return m_opts.run_long_tests(); }
diff --git a/src/tests/unit_ecdsa.cpp b/src/tests/unit_ecdsa.cpp
index dc2a43af5..e21d4764c 100644
--- a/src/tests/unit_ecdsa.cpp
+++ b/src/tests/unit_ecdsa.cpp
@@ -299,7 +299,7 @@ Test::Result test_encoding_options()
result.test_eq("Hybrid point same size as uncompressed",
enc_uncompressed.size(), enc_hybrid.size());
- if(Test::avoid_undefined_behavior() == false)
+ if(Test::no_avoid_undefined_behavior())
{
auto invalid_format = static_cast<Botan::PointGFp::Compression_Type>(99);