blob: b684f2f6ed21570f0e1090238053297f7bb025b8 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <stdlib.h>
#include <iostream>
#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/form_structure.h"
#include "components/autofill/core/common/form_data.h"
#include "components/autofill/core/common/form_field_data.h"
#include "testing/libfuzzer/proto/lpm_interface.h"
namespace autofill {
namespace {
using ::base::ASCIIToUTF16;
void AddField(const std::string& label,
const std::string& name,
const std::string& control_type,
FormData* form_data) {
FormFieldData field;
field.label = ASCIIToUTF16(label);
field.name = ASCIIToUTF16(name);
field.form_control_type = control_type;
form_data->fields.push_back(field);
}
// We run ProcessQueryResponse twice with hardcoded forms vectors. Ideally we
// should also generate forms vectors by using fuzzing, but at the moment we use
// simplified approach. There is no specific reason to use those two hardcoded
// forms vectors, so it can be changed if needed.
DEFINE_BINARY_PROTO_FUZZER(const AutofillQueryResponseContents& response) {
std::vector<FormStructure*> forms;
FormStructure::ProcessQueryResponse(response, forms, nullptr);
FormData form_data;
AddField("username", "username", "text", &form_data);
AddField("password", "password", "password", &form_data);
FormStructure form(form_data);
forms.push_back(&form);
FormStructure::ProcessQueryResponse(response, forms, nullptr);
}
} // namespace
} // namespace autofill