Test more strides
This commit is contained in:
15
src/fuzz.cpp
15
src/fuzz.cpp
@@ -9,12 +9,19 @@ std::pair<std::string, parser3::Status> runStreaming(std::string copy,
|
||||
SerializeState state;
|
||||
auto c = serializeCallbacks();
|
||||
parser3::Parser3 parser(&c, &state);
|
||||
for (int i = 0; i < copy.size(); i += stride) {
|
||||
auto s =
|
||||
parser.parse(copy.data() + i, std::min<int>(stride, copy.size() - i));
|
||||
if (stride == 0) {
|
||||
auto s = parser.parse(copy.data(), copy.size());
|
||||
if (s != parser3::S_AGAIN) {
|
||||
return {state.result, s};
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < copy.size(); i += stride) {
|
||||
auto s =
|
||||
parser.parse(copy.data() + i, std::min<int>(stride, copy.size() - i));
|
||||
if (s != parser3::S_AGAIN) {
|
||||
return {state.result, s};
|
||||
}
|
||||
}
|
||||
}
|
||||
auto s = parser.parse(nullptr, 0);
|
||||
if (s != parser3::S_OK) {
|
||||
@@ -105,7 +112,7 @@ void testStringRoundTrip(std::string_view s) {
|
||||
}
|
||||
for (int stride = 0; stride < 16; ++stride) {
|
||||
auto escaped = "\"" + escapeAsJsonString(s) + "\"";
|
||||
auto parsed = toValue(std::move(escaped));
|
||||
auto parsed = toValue(escaped, stride);
|
||||
if (!parsed.has_value()) {
|
||||
abort();
|
||||
}
|
||||
|
||||
@@ -192,7 +192,7 @@ inline std::string toString(JsonValue const &jsonValue) {
|
||||
__builtin_unreachable();
|
||||
}
|
||||
|
||||
inline std::optional<JsonValue> toValue(std::string copy, int stride = 0) {
|
||||
inline std::optional<JsonValue> toValue(std::string copy, int stride) {
|
||||
ReadValueState state;
|
||||
auto c = readValueCallbacks();
|
||||
parser3::Parser3 parser(&c, &state);
|
||||
@@ -202,7 +202,8 @@ inline std::optional<JsonValue> toValue(std::string copy, int stride = 0) {
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < copy.size(); i += stride) {
|
||||
if (parser.parse(copy.data(), std::min<int>(stride, copy.size() - i)) !=
|
||||
if (parser.parse(copy.data() + i,
|
||||
std::min<int>(stride, copy.size() - i)) !=
|
||||
parser3::S_AGAIN) {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user