aboutsummaryrefslogtreecommitdiffstats
path: root/fuzzing/fuzz_textflow.cpp
diff options
context:
space:
mode:
authorLexi Winter <lexi@le-fay.org>2025-06-29 19:25:29 +0100
committerLexi Winter <lexi@le-fay.org>2025-06-29 19:25:29 +0100
commitbc524d70253a4ab2fe40c3ca3e5666e267c0a4d1 (patch)
tree1e629e7b46b1d9972a973bc93fd100bcebd395be /fuzzing/fuzz_textflow.cpp
downloadnihil-548ea226e1944e077d3ff305df43ef6b366b03f4.tar.gz
nihil-548ea226e1944e077d3ff305df43ef6b366b03f4.tar.bz2
Diffstat (limited to 'fuzzing/fuzz_textflow.cpp')
-rw-r--r--fuzzing/fuzz_textflow.cpp53
1 files changed, 53 insertions, 0 deletions
diff --git a/fuzzing/fuzz_textflow.cpp b/fuzzing/fuzz_textflow.cpp
new file mode 100644
index 0000000..7000f42
--- /dev/null
+++ b/fuzzing/fuzz_textflow.cpp
@@ -0,0 +1,53 @@
+
+// Copyright Catch2 Authors
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.txt or copy at
+// https://www.boost.org/LICENSE_1_0.txt)
+
+// SPDX-License-Identifier: BSL-1.0
+//By Paul Dreik 2020
+
+#include <catch2/internal/catch_textflow.hpp>
+
+#include "NullOStream.h"
+
+#include <string>
+#include <string_view>
+
+
+template<class Callback>
+void split(const char *Data, size_t Size, Callback callback) {
+
+ using namespace std::literals;
+ constexpr auto sep="\n~~~\n"sv;
+
+ std::string_view remainder(Data,Size);
+ for (;;) {
+ auto pos=remainder.find(sep);
+ if(pos==std::string_view::npos) {
+ //not found. use the remainder and exit
+ callback(remainder);
+ return;
+ } else {
+ //found. invoke callback on the first part, then proceed with the rest.
+ callback(remainder.substr(0,pos));
+ remainder=remainder.substr(pos+sep.size());
+ }
+ }
+}
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
+
+ Catch::TextFlow::Columns columns;
+
+ // break the input on separator
+ split((const char*)Data,Size,[&](std::string_view word) {
+ columns+=Catch::TextFlow::Column(std::string(word));
+ });
+
+ NullOStream nul;
+ nul << columns;
+
+ return 0;
+}
+