diff --git a/test/tools/ossfuzz/LPSolverFuzzer.cpp b/test/tools/ossfuzz/LPSolverFuzzer.cpp index 9779458cb..17bbf5a6b 100644 --- a/test/tools/ossfuzz/LPSolverFuzzer.cpp +++ b/test/tools/ossfuzz/LPSolverFuzzer.cpp @@ -17,15 +17,47 @@ // SPDX-License-Identifier: GPL-3.0 #include +#include +#include #include +#include +#include using namespace std; // Prototype as we can't use the FuzzerInterface.h header. extern "C" int LLVMFuzzerTestOneInput(uint8_t const* _data, size_t _size); -extern "C" int LLVMFuzzerTestOneInput(uint8_t const* , size_t ) +extern "C" int LLVMFuzzerTestOneInput(uint8_t const* _data, size_t _size) { + // Parse CSV input + istringstream input; + input.str(string(reinterpret_cast(_data), _size)); + + vector> factors; + for (string line; getline(input, line); ) + { + istringstream lineStream; + lineStream.str(line); + vector factor; + for (string field; getline(lineStream, field, ','); ) + factor.emplace_back(stoi(field)); + factors.emplace_back(factor); + } + + // Debug + for (auto& i: factors) + { + string sep; + for (auto& j: i) + { + cout << sep << j; + if (sep.empty()) + sep = ","; + } + cout << endl; + } + // TODO: Invoke LP solver and Z3 on constraints provided by fuzzer interface, // comparing their outcomes. return 0; diff --git a/test/tools/ossfuzz/lpsolver/ConstraintGenerator.cpp b/test/tools/ossfuzz/lpsolver/ConstraintGenerator.cpp index 852202378..88616439a 100644 --- a/test/tools/ossfuzz/lpsolver/ConstraintGenerator.cpp +++ b/test/tools/ossfuzz/lpsolver/ConstraintGenerator.cpp @@ -33,7 +33,7 @@ string ConstraintGenerator::generate() { constraint += sep + to_string(randomInteger()); if (sep.empty()) - sep = ", "; + sep = ","; } constraint += "\n"; }