dynarmic/fuzzing/fuzz_textflow.cpp
Merry 6879e5bb1c Squashed 'externals/catch/' content from commit ab6c7375b
git-subtree-dir: externals/catch
git-subtree-split: ab6c7375be9a8e71ee84c6f8537113f9f47daf99
2022-12-31 17:28:39 +00:00

47 lines
1.1 KiB
C++

//License: Boost 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;
}