mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-09-13 18:13:42 +02:00
Merge #18126: tests: Add fuzzing harness testing the locale independence of the strencodings.h functions
259e290db8
tests: Add fuzzing harness for locale independence testing (practicalswift)
Pull request description:
Context: [C and C++ locale assumptions in bitcoind and bitcoin-qt](https://github.com/bitcoin/bitcoin/pull/18124)
Add fuzzing harness for locale independence testing of functions in `strencodings.h` and `tinyformat.h`.
Test this PR using:
```
$ make distclean
$ ./autogen.sh
$ CC=clang CXX=clang++ ./configure --enable-fuzz \
--with-sanitizers=address,fuzzer,undefined
$ make
$ src/test/fuzz/locale
…
```
The tested functions (`ParseInt32(…)`, `ParseInt64(…)`, `atoi(const std::string&)`, `atoi64(const std::string& str)`, `i64tostr(const char*)`, `itostr(…)`, `strprintf(…)`) all call locale dependent functions (such as `strtol(…)`, `strtoll(…)`, `atoi(const char*)`, etc.) but are assumed to do so in a way that the tested functions return same results regardless of the chosen C locale (`setlocale`).
This fuzzer aims to test that those assumptions hold up also in practice now and over time.
Top commit has no ACKs.
Tree-SHA512: d108d2f85aa6f482839dafbc7579465ffd4bacf7bc52835ad0fbaa1c71aed9b3870c83447b3d453a03b9ce307e76a3cfdd350a0c77024ab094c93c7d62c8a527
This commit is contained in:
@@ -37,6 +37,7 @@ FUZZ_TARGETS = \
|
||||
test/fuzz/inv_deserialize \
|
||||
test/fuzz/key \
|
||||
test/fuzz/key_origin_info_deserialize \
|
||||
test/fuzz/locale \
|
||||
test/fuzz/merkle_block_deserialize \
|
||||
test/fuzz/messageheader_deserialize \
|
||||
test/fuzz/netaddr_deserialize \
|
||||
@@ -443,6 +444,12 @@ test_fuzz_key_origin_info_deserialize_LDADD = $(FUZZ_SUITE_LD_COMMON)
|
||||
test_fuzz_key_origin_info_deserialize_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||
test_fuzz_key_origin_info_deserialize_SOURCES = $(FUZZ_SUITE) test/fuzz/deserialize.cpp
|
||||
|
||||
test_fuzz_locale_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES)
|
||||
test_fuzz_locale_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
test_fuzz_locale_LDADD = $(FUZZ_SUITE_LD_COMMON)
|
||||
test_fuzz_locale_LDFLAGS = $(RELDFLAGS) $(AM_LDFLAGS) $(LIBTOOL_APP_LDFLAGS)
|
||||
test_fuzz_locale_SOURCES = $(FUZZ_SUITE) test/fuzz/locale.cpp
|
||||
|
||||
test_fuzz_merkle_block_deserialize_CPPFLAGS = $(AM_CPPFLAGS) $(BITCOIN_INCLUDES) -DMERKLE_BLOCK_DESERIALIZE=1
|
||||
test_fuzz_merkle_block_deserialize_CXXFLAGS = $(AM_CXXFLAGS) $(PIE_FLAGS)
|
||||
test_fuzz_merkle_block_deserialize_LDADD = $(FUZZ_SUITE_LD_COMMON)
|
||||
|
96
src/test/fuzz/locale.cpp
Normal file
96
src/test/fuzz/locale.cpp
Normal file
File diff suppressed because one or more lines are too long
@@ -22,6 +22,7 @@ KNOWN_VIOLATIONS=(
|
||||
"src/test/blockchain_tests.cpp.*std::to_string"
|
||||
"src/test/dbwrapper_tests.cpp:.*snprintf"
|
||||
"src/test/denialofservice_tests.cpp.*std::to_string"
|
||||
"src/test/fuzz/locale.cpp"
|
||||
"src/test/fuzz/parse_numbers.cpp:.*atoi"
|
||||
"src/test/key_tests.cpp.*std::to_string"
|
||||
"src/test/net_tests.cpp.*std::to_string"
|
||||
|
Reference in New Issue
Block a user