From 407c694db886ccf2a2429f737a04f4684a2981ef Mon Sep 17 00:00:00 2001 From: z30061262 Date: Thu, 11 Jul 2024 21:32:42 +0800 Subject: [PATCH 1/2] Added PlainArray API --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index 85c2b92..d41df29 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -92,6 +92,10 @@ fileprivate let arkTSLightWeightSet = ILType.iterable + ILType.object(ofGroup: " fileprivate let arkTSDeque = ILType.iterable + ILType.object(ofGroup: "Deque", withProperties: ["length"], withMethods: ["insertFront", "insertEnd", "has", "popFirst", "popLast", "forEach", "getFirst", "getLast"]) /// Type of a ArkTS Queue object. fileprivate let arkTSQueue = ILType.iterable + ILType.object(ofGroup: "Queue", withProperties: ["length"], withMethods: ["add", "pop", "getFirst", "forEach"]) +/// Type of a ArkTS PlainArrayType object. +fileprivate let plainArrayType = ILType.iterable + ILType.object(ofGroup: "PlainArray", withProperties: ["length"], withMethods: ["isEmpty", "has", "get", "getIndexOfKey", "getIndexOfValue", "getKeyAt", "getValueAt", "clone", "add", "remove", "removeAt", "removeRangeFrom", "setValueAt", "toString", "clear", "forEach"]) + + /// Tpye of a ArkTS CollectionsMap object fileprivate let collectionsMap = ILType.iterable + ILType.object(ofGroup: "SharedMap", withProperties: ["size"], withMethods: ["entries", "keys", "values", "clear", "delete", "forEach", "get", "has", "set"]) @@ -130,6 +134,8 @@ fileprivate let arkTSLightWeightSetConstructor = ILType.constructor([] => arkTSL fileprivate let arkTSDequeConstructor = ILType.constructor([] => arkTSDeque) /// Type of the ArkTS Queue constructor builtin. fileprivate let arkTSQueueConstructor = ILType.constructor([] => arkTSQueue) +/// Type of the ArkTS PlainArray constructor builtin. +fileprivate let plainArrayConstructor = ILType.constructor([] => plainArrayType) /// Type of the ArkTs CollectionsMap constructor builtin. fileprivate let collectionsMapConstructor = ILType.constructor([.object()] => collectionsMap) @@ -583,6 +589,34 @@ fileprivate let arkTSASONObjects = ObjectGroup( ] ) +/// ObjectGroup modelling ArkTS PlainArray objects +fileprivate let plainArrays = ObjectGroup( + name: "PlainArray", + instanceType: plainArrayType, + properties: [ + "length" : .number, + ], + methods: [ + "isEmpty" : [] => .boolean, + "has" : [.number] => .boolean, + "get" : [.number] => .anything, + "getIndexOfKey" : [.number] => .number, + "getIndexOfValue" : [.anything] => .number, + "getKeyAt" : [.number] => .number, + "getValueAt" : [.number] => .anything, + "clone" : [] => plainArrayType, + "add" : [.number, .anything] => .undefined, + "remove" : [.number] => .anything, + "removeAt" : [.number] => .anything, + "removeRangeFrom" : [.number, .number] => .number, + "setValueAt" : [.number, .anything] => .undefined, + "toString" : [] => .jsString, + "clear" : [] => .undefined, + "forEach" : [.function([.anything, .opt(.number), .opt(plainArrayType)] => .undefined), .opt(.object())] => .undefined, + ] +) + + let arkProfile = Profile( processArgs: { randomize in var args = [ @@ -612,6 +646,7 @@ let arkProfile = Profile( var LightWeightSet = arkPrivate.Load(arkPrivate.LightWeightSet); var Deque = arkPrivate.Load(arkPrivate.Deque); var Queue = arkPrivate.Load(arkPrivate.Queue); + var PlainArray = arkPrivate.Load(arkPrivate.PlainArray); var ASON = { parse : JSON.parseSendable, stringify : JSON.stringify @@ -684,6 +719,7 @@ let arkProfile = Profile( "LightWeightSet" : arkTSLightWeightSetConstructor, "Deque" : arkTSDequeConstructor, "Queue" : arkTSQueueConstructor, + "PlainArray" : plainArrayConstructor, ], additionalObjectGroups: [ @@ -711,6 +747,7 @@ let arkProfile = Profile( arkTSLightWeightSets, arkTSDeques, arkTSQueues, + plainArrays, ], optionalPostProcessor: nil -- Gitee From de7776b84ff97285637014c52f99ea3b54d9a311 Mon Sep 17 00:00:00 2001 From: z30061262 Date: Thu, 11 Jul 2024 21:32:42 +0800 Subject: [PATCH 2/2] Added PlainArray API --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index 85c2b92..574af98 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -27,7 +27,7 @@ fileprivate let RunNearStackLimitGenerator = CodeGenerator("RunNearStackLimitGen /// ArkTS Generators fileprivate let ArkTSObjectInstanceGenerator = ValueGenerator("ArkTSObjectInstanceGenerator") { b, n in - let builtin = chooseUniform(from: ["Stack", "HashMap", "HashSet", "LinkedList", "List", "ArrayList", "TreeMap", "TreeSet", "LightWeightMap", "LightWeightSet" , "Deque", "Queue"]) + let builtin = chooseUniform(from: ["Stack", "HashMap", "HashSet", "LinkedList", "List", "ArrayList", "TreeMap", "TreeSet", "LightWeightMap", "LightWeightSet" , "Deque", "Queue", "PlainArray"]) let constructor = b.loadBuiltin(builtin) if ["TreeMap", "TreeSet"].contains(builtin) && probability(0.2) { //custom comparator for TreeMap and TreeSet will be generated only in 20% of cases let comparator = b.buildPlainFunction(with: .parameters(n: 2)) { args in @@ -92,6 +92,10 @@ fileprivate let arkTSLightWeightSet = ILType.iterable + ILType.object(ofGroup: " fileprivate let arkTSDeque = ILType.iterable + ILType.object(ofGroup: "Deque", withProperties: ["length"], withMethods: ["insertFront", "insertEnd", "has", "popFirst", "popLast", "forEach", "getFirst", "getLast"]) /// Type of a ArkTS Queue object. fileprivate let arkTSQueue = ILType.iterable + ILType.object(ofGroup: "Queue", withProperties: ["length"], withMethods: ["add", "pop", "getFirst", "forEach"]) +/// Type of a ArkTS PlainArrayType object. +fileprivate let plainArrayType = ILType.iterable + ILType.object(ofGroup: "PlainArray", withProperties: ["length"], withMethods: ["isEmpty", "has", "get", "getIndexOfKey", "getIndexOfValue", "getKeyAt", "getValueAt", "clone", "add", "remove", "removeAt", "removeRangeFrom", "setValueAt", "toString", "clear", "forEach"]) + + /// Tpye of a ArkTS CollectionsMap object fileprivate let collectionsMap = ILType.iterable + ILType.object(ofGroup: "SharedMap", withProperties: ["size"], withMethods: ["entries", "keys", "values", "clear", "delete", "forEach", "get", "has", "set"]) @@ -130,6 +134,8 @@ fileprivate let arkTSLightWeightSetConstructor = ILType.constructor([] => arkTSL fileprivate let arkTSDequeConstructor = ILType.constructor([] => arkTSDeque) /// Type of the ArkTS Queue constructor builtin. fileprivate let arkTSQueueConstructor = ILType.constructor([] => arkTSQueue) +/// Type of the ArkTS PlainArray constructor builtin. +fileprivate let plainArrayConstructor = ILType.constructor([] => plainArrayType) /// Type of the ArkTs CollectionsMap constructor builtin. fileprivate let collectionsMapConstructor = ILType.constructor([.object()] => collectionsMap) @@ -583,6 +589,34 @@ fileprivate let arkTSASONObjects = ObjectGroup( ] ) +/// ObjectGroup modelling ArkTS PlainArray objects +fileprivate let plainArrays = ObjectGroup( + name: "PlainArray", + instanceType: plainArrayType, + properties: [ + "length" : .number, + ], + methods: [ + "isEmpty" : [] => .boolean, + "has" : [.number] => .boolean, + "get" : [.number] => .anything, + "getIndexOfKey" : [.number] => .number, + "getIndexOfValue" : [.anything] => .number, + "getKeyAt" : [.number] => .number, + "getValueAt" : [.number] => .anything, + "clone" : [] => plainArrayType, + "add" : [.number, .anything] => .undefined, + "remove" : [.number] => .anything, + "removeAt" : [.number] => .anything, + "removeRangeFrom" : [.number, .number] => .number, + "setValueAt" : [.number, .anything] => .undefined, + "toString" : [] => .jsString, + "clear" : [] => .undefined, + "forEach" : [.function([.anything, .opt(.number), .opt(plainArrayType)] => .undefined), .opt(.object())] => .undefined, + ] +) + + let arkProfile = Profile( processArgs: { randomize in var args = [ @@ -612,6 +646,7 @@ let arkProfile = Profile( var LightWeightSet = arkPrivate.Load(arkPrivate.LightWeightSet); var Deque = arkPrivate.Load(arkPrivate.Deque); var Queue = arkPrivate.Load(arkPrivate.Queue); + var PlainArray = arkPrivate.Load(arkPrivate.PlainArray); var ASON = { parse : JSON.parseSendable, stringify : JSON.stringify @@ -684,6 +719,7 @@ let arkProfile = Profile( "LightWeightSet" : arkTSLightWeightSetConstructor, "Deque" : arkTSDequeConstructor, "Queue" : arkTSQueueConstructor, + "PlainArray" : plainArrayConstructor, ], additionalObjectGroups: [ @@ -711,6 +747,7 @@ let arkProfile = Profile( arkTSLightWeightSets, arkTSDeques, arkTSQueues, + plainArrays, ], optionalPostProcessor: nil -- Gitee