// Copyright 2015 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 #include #include #include #include "base/strings/string_number_conversions.h" // Entry point for LibFuzzer. extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { base::StringPiece string_piece_input(reinterpret_cast(data), size); std::string string_input(reinterpret_cast(data), size); int out_int; base::StringToInt(string_piece_input, &out_int); unsigned out_uint; base::StringToUint(string_piece_input, &out_uint); int64_t out_int64; base::StringToInt64(string_piece_input, &out_int64); uint64_t out_uint64; base::StringToUint64(string_piece_input, &out_uint64); size_t out_size; base::StringToSizeT(string_piece_input, &out_size); // Test for StringPiece16 if size is even. if (size % 2 == 0) { base::StringPiece16 string_piece_input16( reinterpret_cast(data), size / 2); base::StringToInt(string_piece_input16, &out_int); base::StringToUint(string_piece_input16, &out_uint); base::StringToInt64(string_piece_input16, &out_int64); base::StringToUint64(string_piece_input16, &out_uint64); base::StringToSizeT(string_piece_input16, &out_size); } double out_double; base::StringToDouble(string_input, &out_double); base::HexStringToInt(string_piece_input, &out_int); base::HexStringToUInt(string_piece_input, &out_uint); base::HexStringToInt64(string_piece_input, &out_int64); base::HexStringToUInt64(string_piece_input, &out_uint64); std::vector out_bytes; base::HexStringToBytes(string_piece_input, &out_bytes); base::HexEncode(data, size); // Convert the numbers back to strings. base::NumberToString(out_int); base::NumberToString16(out_int); base::NumberToString(out_uint); base::NumberToString16(out_uint); base::NumberToString(out_int64); base::NumberToString16(out_int64); base::NumberToString(out_uint64); base::NumberToString16(out_uint64); base::NumberToString(out_double); base::NumberToString16(out_double); return 0; }