blob: 8857575f58c0fdbb63e1e91b77494b33f8d2a693 [file] [log] [blame]
// Copyright 2016 The Fuchsia 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 <fcntl.h>
#include <unistd.h>
#include <string>
#include "src/lib/cmx/cmx.h"
#include "src/lib/files/scoped_temp_dir.h"
#include "src/lib/json_parser/json_parser.h"
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
auto char_size = sizeof(uint8_t) / sizeof(char);
auto str_size = size / char_size;
const char* cstr = reinterpret_cast<const char*>(data);
const std::string str(cstr, str_size);
component::CmxMetadata cmx;
json::JSONParser json_parser;
files::ScopedTempDir tmp_dir;
std::string json_basename;
std::string json_path;
if (tmp_dir.NewTempFileWithData(str, &json_path)) {
const int dirfd = open(tmp_dir.path().c_str(), O_RDONLY);
cmx.ParseFromFileAt(dirfd, json_basename, &json_parser);
close(dirfd);
}
// TODO(markdittmer): Should this test start with a "realistic" CmxMetadata?
if (str_size >= 10) {
auto chunk_size = str_size / 10;
for (auto i = 0; i < 10; i++) {
const std::string facet(cstr + (i * chunk_size), chunk_size);
cmx.GetFacet(facet);
}
}
return 0;
}