Skip to content

Commit d70e67f

Browse files
authored
Merge pull request #772 from cppalliance/update_fuzz
Update fuzz
2 parents ca9fb0a + 2b5ce43 commit d70e67f

File tree

4 files changed

+62
-1
lines changed

4 files changed

+62
-1
lines changed

.github/workflows/fuzz.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,26 @@ jobs:
8686
- "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-17 main"
8787
source_keys:
8888
- "https://apt.llvm.org/llvm-snapshot.gpg.key"
89+
- toolset: clang
90+
compiler: clang++-18
91+
cxxstd: "14,17,20,23"
92+
os: ubuntu-24.04
93+
install:
94+
- clang-18
95+
sources:
96+
- "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-18 main"
97+
source_keys:
98+
- "https://apt.llvm.org/llvm-snapshot.gpg.key"
99+
- toolset: clang
100+
compiler: clang++-19
101+
cxxstd: "14,17,20,23"
102+
os: ubuntu-24.04
103+
install:
104+
- clang-19
105+
sources:
106+
- "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-19 main"
107+
source_keys:
108+
- "https://apt.llvm.org/llvm-snapshot.gpg.key"
89109

90110

91111
timeout-minutes: 60

fuzzing/fuzz_from_chars_float.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,36 @@ extern "C" int LLVMFuzzerTestOneInput(const std::uint8_t* data, std::size_t size
2626
boost::decimal::decimal128 ld_val;
2727
boost::decimal::from_chars(c_data, c_data + size, ld_val, format);
2828
}
29+
30+
// Now with strings
31+
const auto c_data_str = std::string(c_data, size);
32+
for (const auto format : formats)
33+
{
34+
boost::decimal::decimal32 f_val;
35+
boost::decimal::from_chars(c_data_str, f_val, format);
36+
37+
boost::decimal::decimal64 val;
38+
boost::decimal::from_chars(c_data_str, val, format);
39+
40+
boost::decimal::decimal128 ld_val;
41+
boost::decimal::from_chars(c_data_str, ld_val, format);
42+
}
43+
44+
// And string views as applicable
45+
#ifdef BOOST_DECIMAL_HAS_STD_STRING_VIEW
46+
const auto c_data_str_view = std::string_view(c_data_str);
47+
for (const auto format : formats)
48+
{
49+
boost::decimal::decimal32 f_val;
50+
boost::decimal::from_chars(c_data_str_view, f_val, format);
51+
52+
boost::decimal::decimal64 val;
53+
boost::decimal::from_chars(c_data_str_view, val, format);
54+
55+
boost::decimal::decimal128 ld_val;
56+
boost::decimal::from_chars(c_data_str_view, ld_val, format);
57+
}
58+
#endif
2959
}
3060
catch(...)
3161
{

fuzzing/old_crashes/fuzz_from_chars_float/crash-da39a3ee5e6b4b0d3255bfef95601890afd80709

Whitespace-only changes.

test/test_from_chars.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,9 +325,20 @@ void test_string_interface()
325325
constexpr T correct_val {42};
326326
std::string str {"42"};
327327
T val;
328-
const auto r = from_chars(str, val);
328+
auto r = from_chars(str, val);
329329
BOOST_TEST(r);
330330
BOOST_TEST_EQ(val, correct_val);
331+
332+
// Empty string
333+
std::string empty;
334+
r = from_chars(empty, val);
335+
BOOST_TEST(r.ec == std::errc::invalid_argument);
336+
337+
#ifdef BOOST_DECIMAL_HAS_STD_STRING_VIEW
338+
std::string_view empty_view = std::string_view(empty);
339+
r = from_chars(empty_view, val);
340+
BOOST_TEST(r.ec == std::errc::invalid_argument);
341+
#endif
331342
}
332343

333344
int main()

0 commit comments

Comments
 (0)