From cc61bc2e19b1c8cb32778ef42746d32b02cc2671 Mon Sep 17 00:00:00 2001 From: fanquake Date: Fri, 27 May 2022 15:54:21 +0100 Subject: [PATCH] compat: remove glibcxx sanity checks These checks were added in #4339, (see also #4081), to test our back-compat stubs, however, those stubs no-longer exist (#22930), meaning that these checks are now just testing some specific standard library behaviour, without a particular rationale, or reason, compared to any other standard library functions we use. There has also been some discussion about the sanity checks in the context of the libbitcoinkernel refactoring, see https://github.com/bitcoin/bitcoin/pull/25065#discussion_r880668218. Removing the checks removes the need to worry about atleast the glibcxx checks. Also remove the list of check from the doc in init.h, because it is incomplete, and anyone who wants to know what checks are included can look at the function. --- src/Makefile.am | 5 --- src/compat/glibcxx_sanity.cpp | 62 ----------------------------------- src/compat/sanity.h | 10 ------ src/init.cpp | 1 - src/init.h | 2 +- src/init/common.cpp | 4 --- src/test/sanity_tests.cpp | 2 -- 7 files changed, 1 insertion(+), 85 deletions(-) delete mode 100644 src/compat/glibcxx_sanity.cpp delete mode 100644 src/compat/sanity.h diff --git a/src/Makefile.am b/src/Makefile.am index 96934bde7a3..a6e9048949b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -139,7 +139,6 @@ BITCOIN_CORE_H = \ compat/byteswap.h \ compat/cpuid.h \ compat/endian.h \ - compat/sanity.h \ compressor.h \ consensus/consensus.h \ consensus/tx_check.h \ @@ -629,15 +628,12 @@ libbitcoin_common_a_SOURCES = \ $(BITCOIN_CORE_H) # util: shared between all executables. -# This library *must* be included to make sure that the glibc -# sanity checks are linked. libbitcoin_util_a_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) libbitcoin_util_a_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS) libbitcoin_util_a_SOURCES = \ support/lockedpool.cpp \ chainparamsbase.cpp \ clientversion.cpp \ - compat/glibcxx_sanity.cpp \ fs.cpp \ interfaces/echo.cpp \ interfaces/handler.cpp \ @@ -857,7 +853,6 @@ libbitcoinkernel_la_SOURCES = \ chainparams.cpp \ clientversion.cpp \ coins.cpp \ - compat/glibcxx_sanity.cpp \ compressor.cpp \ consensus/merkle.cpp \ consensus/tx_check.cpp \ diff --git a/src/compat/glibcxx_sanity.cpp b/src/compat/glibcxx_sanity.cpp deleted file mode 100644 index f2ceeeeb9cb..00000000000 --- a/src/compat/glibcxx_sanity.cpp +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) 2009-2018 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#include -#include -#include -#include - -namespace -{ -// trigger: use ctype::widen to trigger ctype::_M_widen_init(). -// test: convert a char from narrow to wide and back. Verify that the result -// matches the original. -bool sanity_test_widen(char testchar) -{ - const std::ctype& test(std::use_facet >(std::locale())); - return test.narrow(test.widen(testchar), 'b') == testchar; -} - -// trigger: use list::push_back and list::pop_back to trigger _M_hook and -// _M_unhook. -// test: Push a sequence of integers into a list. Pop them off and verify that -// they match the original sequence. -bool sanity_test_list(unsigned int size) -{ - std::list test; - for (unsigned int i = 0; i != size; ++i) - test.push_back(i + 1); - - if (test.size() != size) - return false; - - while (!test.empty()) { - if (test.back() != test.size()) - return false; - test.pop_back(); - } - return true; -} - -} // namespace - -// trigger: string::at(x) on an empty string to trigger __throw_out_of_range_fmt. -// test: force std::string to throw an out_of_range exception. Verify that -// it's caught correctly. -bool sanity_test_range_fmt() -{ - std::string test; - try { - test.at(1); - } catch (const std::out_of_range&) { - return true; - } catch (...) { - } - return false; -} - -bool glibcxx_sanity_test() -{ - return sanity_test_widen('a') && sanity_test_list(100) && sanity_test_range_fmt(); -} diff --git a/src/compat/sanity.h b/src/compat/sanity.h deleted file mode 100644 index 8e5811f1fd5..00000000000 --- a/src/compat/sanity.h +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2009-2021 The Bitcoin Core developers -// Distributed under the MIT software license, see the accompanying -// file COPYING or http://www.opensource.org/licenses/mit-license.php. - -#ifndef BITCOIN_COMPAT_SANITY_H -#define BITCOIN_COMPAT_SANITY_H - -bool glibcxx_sanity_test(); - -#endif // BITCOIN_COMPAT_SANITY_H diff --git a/src/init.cpp b/src/init.cpp index 35e9aa1443b..045808cc715 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include diff --git a/src/init.h b/src/init.h index 2250ae20a05..1e22771dc29 100644 --- a/src/init.h +++ b/src/init.h @@ -43,7 +43,7 @@ bool AppInitBasicSetup(const ArgsManager& args); */ bool AppInitParameterInteraction(const ArgsManager& args, bool use_syscall_sandbox = true); /** - * Initialization sanity checks: ecc init, sanity checks, dir lock. + * Initialization sanity checks. * @note This can be done before daemonization. Do not call Shutdown() if this function fails. * @pre Parameters should be parsed and config file should be read, AppInitParameterInteraction should have been called. */ diff --git a/src/init/common.cpp b/src/init/common.cpp index eac6732968a..788abb98214 100644 --- a/src/init/common.cpp +++ b/src/init/common.cpp @@ -7,7 +7,6 @@ #endif #include -#include #include #include #include @@ -49,9 +48,6 @@ bool SanityChecks() return InitError(Untranslated("Elliptic curve cryptography sanity check failure. Aborting.")); } - if (!glibcxx_sanity_test()) - return false; - if (!Random_SanityCheck()) { return InitError(Untranslated("OS cryptographic RNG sanity check failure. Aborting.")); } diff --git a/src/test/sanity_tests.cpp b/src/test/sanity_tests.cpp index a7057f83612..907a3fd15b0 100644 --- a/src/test/sanity_tests.cpp +++ b/src/test/sanity_tests.cpp @@ -2,7 +2,6 @@ // Distributed under the MIT software license, see the accompanying // file COPYING or http://www.opensource.org/licenses/mit-license.php. -#include #include #include #include @@ -13,7 +12,6 @@ BOOST_FIXTURE_TEST_SUITE(sanity_tests, BasicTestingSetup) BOOST_AUTO_TEST_CASE(basic_sanity) { - BOOST_CHECK_MESSAGE(glibcxx_sanity_test() == true, "stdlib sanity test"); BOOST_CHECK_MESSAGE(ECC_InitSanityCheck() == true, "secp256k1 sanity test"); BOOST_CHECK_MESSAGE(ChronoSanityCheck() == true, "chrono epoch test"); }