Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Functions | Variables
dart_libfuzzer.cc File Reference
#include <stddef.h>
#include <stdint.h>
#include "bin/dartutils.h"
#include "platform/text_buffer.h"
#include "platform/unicode.h"
#include "platform/utils.h"
#include "vm/json_writer.h"

Go to the source code of this file.

Functions

static int TestUnicode (const uint8_t *Data, size_t Size)
 
static int TestUtilities (const uint8_t *Data, size_t Size)
 
static int InitDartVM ()
 
int LLVMFuzzerInitialize (int *argc_in, char ***argv_in)
 
int LLVMFuzzerTestOneInput (const uint8_t *Data, size_t Size)
 

Variables

static int target = 0
 

Function Documentation

◆ InitDartVM()

static int InitDartVM ( )
static

Definition at line 62 of file dart_libfuzzer.cc.

62 {
63 // TODO(ajcbik): one-time setup of Dart VM.
64 return 0;
65}

◆ LLVMFuzzerInitialize()

int LLVMFuzzerInitialize ( int argc_in,
char ***  argv_in 
)

Definition at line 68 of file dart_libfuzzer.cc.

68 {
69 // Parse --t=<target> from command line.
70 int argc = *argc_in;
71 char** argv = *argv_in;
72 while (--argc > 0) {
73 char* ptr = *++argv;
74 if (*ptr++ == '-' && *ptr++ == '-' && *ptr++ == 't' && *ptr++ == '=') {
75 target = atoi(ptr);
76 }
77 }
78 // Initialize Dart VM.
79 return InitDartVM();
80}
static int InitDartVM()
static int target
char ** argv
Definition library.h:9

◆ LLVMFuzzerTestOneInput()

int LLVMFuzzerTestOneInput ( const uint8_t *  Data,
size_t  Size 
)

Definition at line 85 of file dart_libfuzzer.cc.

85 {
86 switch (target) {
87 case 0:
88 return TestUnicode(Data, Size);
89 case 1:
90 return TestUtilities(Data, Size);
91 default:
92 fprintf(stderr, "dart_libfuzzer: invalid target --t=%d\n", target);
93 return 1;
94 }
95}
static int TestUnicode(const uint8_t *Data, size_t Size)
static int TestUtilities(const uint8_t *Data, size_t Size)

◆ TestUnicode()

static int TestUnicode ( const uint8_t *  Data,
size_t  Size 
)
static

Definition at line 19 of file dart_libfuzzer.cc.

19 {
21 dart::Utf8::CodeUnitCount(Data, Size, &type);
22 dart::Utf8::IsValid(Data, Size);
23 int32_t dst = 0;
24 dart::Utf8::Decode(Data, Size, &dst);
25 uint16_t dst16[1024];
26 dart::Utf8::DecodeToUTF16(Data, Size, dst16, 1024);
27 int32_t dst32[1024];
28 dart::Utf8::DecodeToUTF32(Data, Size, dst32, 1024);
29 dart::Utf8::ReportInvalidByte(Data, Size, 1024);
30 return 0;
31}
static bool DecodeToUTF32(const uint8_t *utf8_array, intptr_t array_len, int32_t *dst, intptr_t len)
Definition unicode.cc:245
static intptr_t CodeUnitCount(const uint8_t *utf8_array, intptr_t array_len, Type *type)
Definition unicode.cc:46
static intptr_t ReportInvalidByte(const uint8_t *utf8_array, intptr_t array_len, intptr_t len)
Definition unicode.cc:163
static bool IsValid(const uint8_t *utf8_array, intptr_t array_len)
Definition unicode.cc:70
static bool DecodeToUTF16(const uint8_t *utf8_array, intptr_t array_len, uint16_t *dst, intptr_t len)
Definition unicode.cc:217
static intptr_t Decode(const uint8_t *utf8_array, intptr_t array_len, int32_t *ch)
Definition unicode.cc:135
dst
Definition cp.py:12

◆ TestUtilities()

static int TestUtilities ( const uint8_t *  Data,
size_t  Size 
)
static

Definition at line 35 of file dart_libfuzzer.cc.

35 {
36 dart::Utils::StringHash(reinterpret_cast<const char*>(Data), Size);
38 // Text buffer.
40 for (size_t i = 0; i < Size; i++) {
41 buffer.AddChar(Data[i]);
42 }
43 if (static_cast<size_t>(buffer.length()) != Size) return 1;
44 buffer.AddRaw(Data, Size);
45 if (static_cast<size_t>(buffer.length()) != 2 * Size) return 1;
46 free(buffer.Steal());
47 buffer.AddRaw(Data, Size);
48 if (static_cast<size_t>(buffer.length()) != Size) return 1;
49 // Json writer.
50 dart::JSONWriter writer(1);
51 writer.OpenObject("object");
52 writer.AppendBytes(Data, Size);
53 writer.CloseObject();
54 for (size_t i = 0; i < Size; i++) {
55 writer.PrintValue(static_cast<intptr_t>(Data[i]));
56 }
57 writer.PrintValueBase64(Data, Size);
58 return 0;
59}
static uint32_t StringHash(const void *data, int length)
Definition utils.cc:114
static MagicNumber SniffForMagicNumber(const char *filename)
Definition dartutils.cc:407
static const uint8_t buffer[]
TSize< Scalar > Size
Definition size.h:137

Variable Documentation

◆ target

int target = 0
static

Definition at line 15 of file dart_libfuzzer.cc.