blob: 421322ad7d36f02ddbe5b57afbad0692218d72f9 [file] [edit]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <cstdlib>
#include <iostream>
#include <string>
#include <vector>
#include "base/check.h"
#include "testing/libfuzzer/proto/lpm_interface.h"
#include "third_party/sqlite/fuzz/sql_query_grammar.pb.h"
#include "third_party/sqlite/fuzz/sql_query_grammar_fuzzable.pb.h"
#include "third_party/sqlite/fuzz/sql_query_proto_to_string.h"
#include "third_party/sqlite/fuzz/sql_run_queries.h"
using namespace sql_query_grammar;
DEFINE_PROTO_FUZZER(const fuzzable::sql_query_grammar::Expr& fuzzable_expr) {
std::string serialized;
CHECK(fuzzable_expr.SerializeToString(&serialized));
sql_query_grammar::Expr expr;
// Recursion limits can cause parsing to fail.
if (!expr.ParseFromString(serialized)) {
return;
}
std::string expr_str = sql_fuzzer::ExprToString(expr);
// Convert printf command into runnable SQL query.
expr_str = "SELECT " + expr_str + ";";
if (::getenv("LPM_DUMP_NATIVE_INPUT")) {
std::cout << "_________________________" << std::endl;
std::cout << expr_str << std::endl;
std::cout << "------------------------" << std::endl;
}
std::vector<std::string> queries;
queries.push_back(expr_str);
sql_fuzzer::RunSqlQueries(queries, ::getenv("LPM_SQLITE_TRACE"));
}