Skip to content

Commit 141fcfa

Browse files
Fizaa Luthracommit-bot@chromium.org
authored andcommitted
[dartfuzz] Adding fuzzing support for more core types
Change-Id: Id377a58a54cb17cb3e7e337efb9de01d237aa5a3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/128766 Reviewed-by: Aart Bik <ajcbik@google.com> Reviewed-by: Ben Konyi <bkonyi@google.com> Commit-Queue: Fizaa Luthra <fizaaluthra@google.com>
1 parent d0049dd commit 141fcfa

5 files changed

Lines changed: 138022 additions & 2412 deletions

File tree

runtime/tools/dartfuzz/dartfuzz.dart

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import 'dartfuzz_type_table.dart';
1414
// Version of DartFuzz. Increase this each time changes are made
1515
// to preserve the property that a given version of DartFuzz yields
1616
// the same fuzzed program for a deterministic random seed.
17-
const String version = '1.80';
17+
const String version = '1.81';
1818

1919
// Restriction on statements and expressions.
2020
const int stmtDepth = 1;
@@ -1472,6 +1472,8 @@ class DartFuzz {
14721472

14731473
void emitBool() => emit(coinFlip() ? 'true' : 'false');
14741474

1475+
void emitNull() => emit("null");
1476+
14751477
void emitSmallPositiveInt({int limit = 50, bool includeSemicolon = false}) {
14761478
emit('${choose(limit)}');
14771479
if (includeSemicolon) {
@@ -1680,7 +1682,9 @@ class DartFuzz {
16801682
{bool smallPositiveValue = false, RhsFilter rhsFilter}) {
16811683
// Randomly specialize interface if possible. E.g. num to int.
16821684
tp = maybeSpecializeInterface(tp);
1683-
if (tp == DartType.BOOL) {
1685+
if (tp == DartType.NULL) {
1686+
emitNull();
1687+
} else if (tp == DartType.BOOL) {
16841688
emitBool();
16851689
} else if (tp == DartType.INT) {
16861690
if (smallPositiveValue) {
@@ -1694,6 +1698,10 @@ class DartFuzz {
16941698
emitNum(smallPositiveValue: smallPositiveValue);
16951699
} else if (tp == DartType.STRING) {
16961700
emitString();
1701+
} else if (tp == DartType.ENDIAN) {
1702+
// The Endian type doesn't have a public constructor, so we emit a
1703+
// library call instead.
1704+
emitLibraryCall(depth, tp);
16971705
} else if (dartType.constructors(tp).isNotEmpty) {
16981706
// Constructors serve as literals for non trivially constructable types.
16991707
// Important note: We have to test for existence of a non trivial

runtime/tools/dartfuzz/dartfuzz_api_table.dart

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,9 @@ class DartLib {
2929

3030
static final typeToLibraryMethods = {
3131
DartType.BOOL: boolLibs,
32+
DartType.DEPRECATED: deprecatedLibs,
3233
DartType.DOUBLE: doubleLibs,
34+
DartType.ENDIAN: endianLibs,
3335
DartType.FLOAT32LIST: float32ListLibs,
3436
DartType.FLOAT32X4: float32x4Libs,
3537
DartType.FLOAT32X4LIST: float32x4ListLibs,
@@ -45,8 +47,12 @@ class DartLib {
4547
DartType.INT8LIST: int8ListLibs,
4648
DartType.LIST_INT: listLibs,
4749
DartType.MAP_INT_STRING: mapLibs,
50+
DartType.NULL: nullLibs,
51+
DartType.RUNEITERATOR: runeIteratorLibs,
52+
DartType.RUNES: runesLibs,
4853
DartType.SET_INT: setLibs,
4954
DartType.STRING: stringLibs,
55+
DartType.SYMBOL: symbolLibs,
5056
DartType.UINT16LIST: uint16ListLibs,
5157
DartType.UINT32LIST: uint32ListLibs,
5258
DartType.UINT64LIST: uint64ListLibs,
@@ -74,16 +80,29 @@ class DartLib {
7480
DartLib('flagX', [DartType.INT32X4, DartType.VOID], false),
7581
DartLib('flagY', [DartType.INT32X4, DartType.VOID], false),
7682
DartLib('flagZ', [DartType.INT32X4, DartType.VOID], false),
83+
DartLib('hasMatch', [DartType.REGEXP, DartType.STRING], true),
84+
DartLib('isCaseSensitive', [DartType.REGEXP, DartType.VOID], false),
85+
DartLib('isDotAll', [DartType.REGEXP, DartType.VOID], false),
7786
DartLib('isEmpty', [DartType.MAP_INT_STRING, DartType.VOID], false),
87+
DartLib('isEmpty', [DartType.STRINGBUFFER, DartType.VOID], false),
7888
DartLib('isEmpty', [DartType.STRING, DartType.VOID], false),
7989
DartLib('isEven', [DartType.INT, DartType.VOID], false),
8090
DartLib('isFinite', [DartType.DOUBLE, DartType.VOID], false),
8191
DartLib('isInfinite', [DartType.DOUBLE, DartType.VOID], false),
92+
DartLib('isMultiLine', [DartType.REGEXP, DartType.VOID], false),
8293
DartLib('isNaN', [DartType.DOUBLE, DartType.VOID], false),
8394
DartLib('isNegative', [DartType.DOUBLE, DartType.VOID], false),
8495
DartLib('isNotEmpty', [DartType.MAP_INT_STRING, DartType.VOID], false),
96+
DartLib('isNotEmpty', [DartType.STRINGBUFFER, DartType.VOID], false),
8597
DartLib('isNotEmpty', [DartType.STRING, DartType.VOID], false),
8698
DartLib('isOdd', [DartType.INT, DartType.VOID], false),
99+
DartLib('isRunning', [DartType.STOPWATCH, DartType.VOID], false),
100+
DartLib('isUnicode', [DartType.REGEXP, DartType.VOID], false),
101+
DartLib('moveNext', [DartType.RUNEITERATOR, DartType.VOID], true),
102+
DartLib('movePrevious', [DartType.RUNEITERATOR, DartType.VOID], true),
103+
];
104+
static const deprecatedLibs = [
105+
DartLib('deprecated', [DartType.VOID, DartType.VOID], false),
87106
];
88107
static const doubleLibs = [
89108
DartLib('abs', [DartType.DOUBLE, DartType.VOID], true),
@@ -104,6 +123,7 @@ class DartLib {
104123
DartLib('double.negativeInfinity', [DartType.VOID, DartType.VOID], false),
105124
DartLib('double.tryParse', [DartType.VOID, DartType.STRING], true),
106125
DartLib('e', [DartType.VOID, DartType.VOID], false),
126+
DartLib('end', [DartType.RANGEERROR, DartType.VOID], false),
107127
DartLib('exp', [DartType.VOID, DartType.DOUBLE], true),
108128
DartLib('floorToDouble', [DartType.DOUBLE, DartType.VOID], true),
109129
DartLib('floorToDouble', [DartType.DOUBLE, DartType.VOID], true),
@@ -127,6 +147,7 @@ class DartLib {
127147
DartLib('sqrt', [DartType.VOID, DartType.DOUBLE], true),
128148
DartLib('sqrt1_2', [DartType.VOID, DartType.VOID], false),
129149
DartLib('sqrt2', [DartType.VOID, DartType.VOID], false),
150+
DartLib('start', [DartType.RANGEERROR, DartType.VOID], false),
130151
DartLib('tan', [DartType.VOID, DartType.DOUBLE], true),
131152
DartLib('toDouble', [DartType.DOUBLE, DartType.VOID], true),
132153
DartLib('truncateToDouble', [DartType.DOUBLE, DartType.VOID], true),
@@ -139,6 +160,11 @@ class DartLib {
139160
DartLib('y', [DartType.FLOAT64X2, DartType.VOID], false),
140161
DartLib('z', [DartType.FLOAT32X4, DartType.VOID], false),
141162
];
163+
static const endianLibs = [
164+
DartLib('Endian.big', [DartType.VOID, DartType.VOID], false),
165+
DartLib('Endian.host', [DartType.VOID, DartType.VOID], false),
166+
DartLib('Endian.little', [DartType.VOID, DartType.VOID], false),
167+
];
142168
static const float32ListLibs = [
143169
DartLib(
144170
'sublist', [DartType.FLOAT32LIST, DartType.INT, DartType.INT], true),
@@ -850,21 +876,33 @@ class DartLib {
850876
DartLib('codeUnitAt', [DartType.STRING, DartType.INT], true),
851877
DartLib('compareTo', [DartType.DOUBLE, DartType.DOUBLE], true),
852878
DartLib('compareTo', [DartType.STRING, DartType.STRING], true),
879+
DartLib('current', [DartType.RUNEITERATOR, DartType.VOID], false),
880+
DartLib('currentSize', [DartType.RUNEITERATOR, DartType.VOID], false),
881+
DartLib('elapsedMicroseconds', [DartType.STOPWATCH, DartType.VOID], false),
882+
DartLib('elapsedMilliseconds', [DartType.STOPWATCH, DartType.VOID], false),
883+
DartLib('elapsedTicks', [DartType.STOPWATCH, DartType.VOID], false),
884+
DartLib('end', [DartType.INDEXERROR, DartType.VOID], false),
853885
DartLib('floor', [DartType.DOUBLE, DartType.VOID], true),
854886
DartLib('floor', [DartType.DOUBLE, DartType.VOID], true),
855887
DartLib('floor', [DartType.INT, DartType.VOID], true),
888+
DartLib('frequency', [DartType.STOPWATCH, DartType.VOID], false),
856889
DartLib('gcd', [DartType.INT, DartType.INT], true),
857890
DartLib('indexOf', [DartType.LIST_INT, DartType.INT, DartType.INT], true),
858891
DartLib('int.fromEnvironment', [DartType.VOID, DartType.STRING], true),
859892
DartLib('int.parse', [DartType.VOID, DartType.STRING], true),
860893
DartLib('int.tryParse', [DartType.VOID, DartType.STRING], true),
894+
DartLib('last', [DartType.RUNES, DartType.VOID], false),
861895
DartLib(
862896
'lastIndexOf', [DartType.LIST_INT, DartType.INT, DartType.INT], true),
897+
DartLib('length', [DartType.INDEXERROR, DartType.VOID], false),
863898
DartLib('length', [DartType.LIST_INT, DartType.VOID], false),
864899
DartLib('length', [DartType.MAP_INT_STRING, DartType.VOID], false),
900+
DartLib('length', [DartType.STRINGBUFFER, DartType.VOID], false),
865901
DartLib('length', [DartType.STRING, DartType.VOID], false),
866902
DartLib('modInverse', [DartType.INT, DartType.INT], true),
867903
DartLib('modPow', [DartType.INT, DartType.INT, DartType.INT], true),
904+
DartLib('offset', [DartType.FORMATEXCEPTION, DartType.VOID], false),
905+
DartLib('rawIndex', [DartType.RUNEITERATOR, DartType.VOID], false),
868906
DartLib('removeAt', [DartType.LIST_INT, DartType.INT], true),
869907
DartLib('removeLast', [DartType.LIST_INT, DartType.VOID], true),
870908
DartLib('round', [DartType.DOUBLE, DartType.VOID], true),
@@ -874,6 +912,7 @@ class DartLib {
874912
DartLib('signMask', [DartType.FLOAT32X4, DartType.VOID], false),
875913
DartLib('signMask', [DartType.FLOAT64X2, DartType.VOID], false),
876914
DartLib('signMask', [DartType.INT32X4, DartType.VOID], false),
915+
DartLib('start', [DartType.INDEXERROR, DartType.VOID], false),
877916
DartLib('toInt', [DartType.DOUBLE, DartType.VOID], true),
878917
DartLib('toSigned', [DartType.INT, DartType.INT], true),
879918
DartLib('toUnsigned', [DartType.INT, DartType.INT], true),
@@ -959,6 +998,15 @@ class DartLib {
959998
DartLib('Map<int, String>.unmodifiable',
960999
[DartType.VOID, DartType.MAP_INT_STRING], true),
9611000
];
1001+
static const nullLibs = [
1002+
DartLib('provisional', [DartType.VOID, DartType.VOID], false),
1003+
];
1004+
static const runeIteratorLibs = [
1005+
DartLib('iterator', [DartType.RUNES, DartType.VOID], false),
1006+
];
1007+
static const runesLibs = [
1008+
DartLib('runes', [DartType.STRING, DartType.VOID], false),
1009+
];
9621010
static const setLibs = [
9631011
DartLib('Set<int>.identity', [DartType.VOID, DartType.VOID], true),
9641012
DartLib('difference', [DartType.SET_INT, DartType.SET_INT], true),
@@ -982,26 +1030,67 @@ class DartLib {
9821030
DartLib('Uri.encodeQueryComponent', [DartType.VOID, DartType.STRING], true),
9831031
DartLib('base64Encode', [DartType.VOID, DartType.LIST_INT], true),
9841032
DartLib('base64UrlEncode', [DartType.VOID, DartType.LIST_INT], true),
1033+
DartLib('currentAsString', [DartType.RUNEITERATOR, DartType.VOID], false),
1034+
DartLib('expires', [DartType.DEPRECATED, DartType.VOID], false),
1035+
DartLib('message', [DartType.DEPRECATED, DartType.VOID], false),
1036+
DartLib('message', [DartType.FORMATEXCEPTION, DartType.VOID], false),
1037+
DartLib('message', [DartType.PROVISIONAL, DartType.VOID], false),
1038+
DartLib('message', [DartType.STATEERROR, DartType.VOID], false),
1039+
DartLib('message', [DartType.UNIMPLEMENTEDERROR, DartType.VOID], false),
1040+
DartLib('message', [DartType.UNSUPPORTEDERROR, DartType.VOID], false),
1041+
DartLib('name', [DartType.ARGUMENTERROR, DartType.VOID], false),
9851042
DartLib('padLeft', [DartType.STRING, DartType.INT, DartType.STRING], true,
9861043
restrictions: [Restriction.none, Restriction.small, Restriction.small]),
9871044
DartLib('padRight', [DartType.STRING, DartType.INT, DartType.STRING], true,
9881045
restrictions: [Restriction.none, Restriction.small, Restriction.small]),
1046+
DartLib('pattern', [DartType.REGEXP, DartType.VOID], false),
9891047
DartLib('replaceRange',
9901048
[DartType.STRING, DartType.INT, DartType.INT, DartType.STRING], true),
1049+
DartLib('string', [DartType.RUNEITERATOR, DartType.VOID], false),
1050+
DartLib('string', [DartType.RUNES, DartType.VOID], false),
1051+
DartLib('stringMatch', [DartType.REGEXP, DartType.STRING], true),
9911052
DartLib('substring', [DartType.STRING, DartType.INT, DartType.INT], true),
9921053
DartLib('toLowerCase', [DartType.STRING, DartType.VOID], true),
9931054
DartLib('toRadixString', [DartType.INT, DartType.INT], true),
1055+
DartLib('toString',
1056+
[DartType.ABSTRACTCLASSINSTANTIATIONERROR, DartType.VOID], true),
1057+
DartLib('toString', [DartType.ARGUMENTERROR, DartType.VOID], true),
9941058
DartLib('toString', [DartType.BOOL, DartType.VOID], true),
1059+
DartLib('toString', [DartType.CONCURRENTMODIFICATIONERROR, DartType.VOID],
1060+
true),
1061+
DartLib(
1062+
'toString', [DartType.CYCLICINITIALIZATIONERROR, DartType.VOID], true),
1063+
DartLib('toString', [DartType.DEPRECATED, DartType.VOID], true),
9951064
DartLib('toString', [DartType.DOUBLE, DartType.VOID], true),
9961065
DartLib('toString', [DartType.DOUBLE, DartType.VOID], true),
1066+
DartLib('toString', [DartType.ERROR, DartType.VOID], true),
1067+
DartLib('toString', [DartType.FALLTHROUGHERROR, DartType.VOID], true),
1068+
DartLib('toString', [DartType.FORMATEXCEPTION, DartType.VOID], true),
9971069
DartLib('toString', [DartType.INT, DartType.VOID], true),
1070+
DartLib('toString',
1071+
[DartType.INTEGERDIVISIONBYZEROEXCEPTION, DartType.VOID], true),
1072+
DartLib('toString', [DartType.MAPENTRY_INT_STRING, DartType.VOID], true),
1073+
DartLib('toString', [DartType.NULL, DartType.VOID], true),
1074+
DartLib('toString', [DartType.NULLTHROWNERROR, DartType.VOID], true),
1075+
DartLib('toString', [DartType.OUTOFMEMORYERROR, DartType.VOID], true),
1076+
DartLib('toString', [DartType.STACKOVERFLOWERROR, DartType.VOID], true),
1077+
DartLib('toString', [DartType.STATEERROR, DartType.VOID], true),
1078+
DartLib('toString', [DartType.STRINGBUFFER, DartType.VOID], true),
1079+
DartLib('toString', [DartType.UNIMPLEMENTEDERROR, DartType.VOID], true),
1080+
DartLib('toString', [DartType.UNSUPPORTEDERROR, DartType.VOID], true),
9981081
DartLib('toStringAsExponential', [DartType.DOUBLE, DartType.INT], true),
9991082
DartLib('toStringAsFixed', [DartType.DOUBLE, DartType.INT], true),
10001083
DartLib('toStringAsPrecision', [DartType.DOUBLE, DartType.INT], true),
10011084
DartLib('toUpperCase', [DartType.STRING, DartType.VOID], true),
10021085
DartLib('trim', [DartType.STRING, DartType.VOID], true),
10031086
DartLib('trimLeft', [DartType.STRING, DartType.VOID], true),
10041087
DartLib('trimRight', [DartType.STRING, DartType.VOID], true),
1088+
DartLib('variableName', [DartType.CYCLICINITIALIZATIONERROR, DartType.VOID],
1089+
false),
1090+
];
1091+
static const symbolLibs = [
1092+
DartLib('Symbol.empty', [DartType.VOID, DartType.VOID], false),
1093+
DartLib('Symbol.unaryMinus', [DartType.VOID, DartType.VOID], false),
10051094
];
10061095
static const uint16ListLibs = [
10071096
DartLib('Uint16List.fromList', [DartType.VOID, DartType.LIST_INT], true),
@@ -1045,10 +1134,16 @@ class DartLib {
10451134
DartLib('clear', [DartType.LIST_INT, DartType.VOID], true),
10461135
DartLib('clear', [DartType.MAP_INT_STRING, DartType.VOID], true),
10471136
DartLib('clear', [DartType.SET_INT, DartType.VOID], true),
1137+
DartLib('clear', [DartType.STRINGBUFFER, DartType.VOID], true),
10481138
DartLib('fillRange',
10491139
[DartType.LIST_INT, DartType.INT, DartType.INT, DartType.INT], true),
10501140
DartLib('insert', [DartType.LIST_INT, DartType.INT, DartType.INT], true),
10511141
DartLib(
10521142
'removeRange', [DartType.LIST_INT, DartType.INT, DartType.INT], true),
1143+
DartLib('reset', [DartType.RUNEITERATOR, DartType.INT], true),
1144+
DartLib('reset', [DartType.STOPWATCH, DartType.VOID], true),
1145+
DartLib('start', [DartType.STOPWATCH, DartType.VOID], true),
1146+
DartLib('stop', [DartType.STOPWATCH, DartType.VOID], true),
1147+
DartLib('writeCharCode', [DartType.STRINGBUFFER, DartType.INT], true),
10531148
];
10541149
}

0 commit comments

Comments
 (0)