Files
weaseljson/src/fuzz.cpp
2025-05-18 14:14:45 -04:00

48 lines
1.2 KiB
C++

#include "minify.h"
#include "parser3.h"
std::pair<std::string, parser3::Status> runStreaming(std::string copy) {
MinifyState state;
auto c = minifyCallbacks();
parser3::Parser3 parser(&c, &state);
for (int i = 0; i < copy.size(); ++i) {
auto s = parser.parse(copy.data() + i, 1);
if (s != parser3::S_AGAIN) {
return {state.result, s};
}
}
auto s = parser.parse(nullptr, 0);
if (s != parser3::S_OK) {
return {state.result, s};
}
return {state.result, parser3::S_OK};
}
std::pair<std::string, parser3::Status> runBatch(std::string copy) {
MinifyState state;
auto c = minifyCallbacks();
parser3::Parser3 parser(&c, &state);
auto s = parser.parse(copy.data(), copy.size());
if (s != parser3::S_AGAIN) {
return {state.result, s};
}
s = parser.parse(nullptr, 0);
if (s != parser3::S_OK) {
return {state.result, s};
}
return {state.result, parser3::S_OK};
}
void testStreaming(std::string const &json) {
auto result1 = runStreaming(json);
auto result2 = runBatch(json);
if (result1 != result2) {
abort();
}
}
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
testStreaming(std::string((const char *)data, size));
return 0;
}