From 12025f11454008a736aef4fb52aacb43138d9d1f Mon Sep 17 00:00:00 2001 From: z30061262 Date: Sat, 8 Jun 2024 16:52:40 +0800 Subject: [PATCH 1/3] Added ArrayList 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 3bcccb3..aec2a76 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"]) + let builtin = chooseUniform(from: ["Stack", "HashMap", "HashSet", "ArrayList"]) let constructor = b.loadBuiltin(builtin) b.construct(constructor) } @@ -38,6 +38,8 @@ fileprivate let arkTSStack = ILType.iterable + ILType.object(ofGroup: "Stack", w fileprivate let arkTSHashMap = ILType.iterable + ILType.object(ofGroup: "HashMap", withProperties: ["length"], withMethods: ["isEmpty", "hasKey", "hasValue", "get", "setAll", "set", "remove", "clear", "keys", "values", "replace", "forEach", "entries"]) /// Type of a ArkTS HashSet object. fileprivate let arkTSHashSet = ILType.iterable + ILType.object(ofGroup: "HashSet", withProperties: ["length"], withMethods: ["isEmpty", "has", "add", "remove", "clear", "values", "forEach", "entries"]) +/// Type of a ArkTS ArrayList object. +fileprivate let arkTSArrayList = ILType.iterable + ILType.object(ofGroup: "ArrayList", withProperties: ["length"], withMethods: ["add", "insert", "has", "getIndexOf", "getLastIndexOf", "removeByIndex", "remove", "removeByRange", "replaceAllElements", "forEach", "sort", "subArrayList", "clear", "clone", "getCapacity", "convertToArray", "isEmpty", "increaseCapacityTo", "trimToCurrentLength"]) /// Type of the ArkTS Stack constructor builtin. fileprivate let arkTSStackConstructor = ILType.constructor([] => arkTSStack) @@ -45,6 +47,9 @@ fileprivate let arkTSStackConstructor = ILType.constructor([] => arkTSStack) fileprivate let arkTSHashMapConstructor = ILType.constructor([] => arkTSHashMap) /// Type of the ArkTS HashMap constructor builtin. fileprivate let arkTSHashSetConstructor = ILType.constructor([] => arkTSHashSet) +/// Type of the ArkTS ArrayList constructor builtin. +fileprivate let arkTSArrayListConstructor = ILType.constructor([] => arkTSArrayList) + /// ObjectGroup modelling ArkTS Stack objects fileprivate let arkTSStacks = ObjectGroup( @@ -106,6 +111,35 @@ fileprivate let arkTSHashSets = ObjectGroup( ] ) +fileprivate let arrayLists = ObjectGroup( + name: "ArrayList", + instanceType: arkTSArrayList, + properties: [ + "length" : .number, + ], + methods: [ + "add" : [.anything] => .boolean, + "insert" : [.anything, .number] => .undefined, + "has" : [.anything] => .boolean, + "getIndexOf" : [.anything] => .number, + "getLastIndexOf" : [.anything] => .number, + "removeByIndex" : [.number] => .anything, + "remove" : [.anything] => .boolean, + "removeByRange" : [.number, .number] => .undefined, + "replaceAllElements" : [.function([.anything, .opt(.number), .opt(arkTSArrayList)] => .anything), .opt(.object())] => .undefined, + "forEach" : [.function([.anything, .opt(.number), .opt(arkTSArrayList)] => .undefined), .opt(.object())] => .undefined, + "sort" : [.opt(.function([.anything, .anything] => .number))] => .undefined, + "subArrayList" : [.number, .number] => arkTSArrayList, + "clear" : [] => .undefined, + "clone" : [] => arkTSArrayList, + "getCapacity" : [] => .number, + "convertToArray" : [] => .object(), + "isEmpty" : [] => .boolean, + "increaseCapacityTo" : [.number] => .undefined, + "trimToCurrentLength": [] => .undefined, + ] +) + let arkProfile = Profile( processArgs: { randomize in var args = [ @@ -126,6 +160,7 @@ let arkProfile = Profile( var Stack = arkPrivate.Load(arkPrivate.Stack); var HashMap = arkPrivate.Load(arkPrivate.HashMap); var HashSet = arkPrivate.Load(arkPrivate.HashSet); + var ArrayList = arkPrivate.Load(arkPrivate.ArrayList); function bgc() { for(let i=0; i<0x10000; i+=1) {new String();} @@ -171,12 +206,14 @@ let arkProfile = Profile( "Stack" : arkTSStackConstructor, "HashMap" : arkTSHashMapConstructor, "HashSet" : arkTSHashSetConstructor, + "ArrayList" : arkTSArrayListConstructor, ], additionalObjectGroups: [ arkTSStacks, arkTSHashMaps, arkTSHashSets, + arrayLists, ], optionalPostProcessor: nil -- Gitee From 6703a8f5c63fee82c6137c89896d02eabc9f93c5 Mon Sep 17 00:00:00 2001 From: z30061262 Date: Wed, 12 Jun 2024 15:30:19 +0800 Subject: [PATCH 2/3] Resolve merge conflict --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index 85b880a..2132e20 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"]) + let builtin = chooseUniform(from: ["Stack", "HashMap", "HashSet", "LinkedList", "List", "ArrayList"]) let constructor = b.loadBuiltin(builtin) b.construct(constructor) } @@ -68,8 +68,8 @@ fileprivate let arkTSListConstructor = ILType.constructor([] => arkTSList) /// Type of the ArkTs CollectionsMap constructor builtin. fileprivate let collectionsMapConstructor = ILType.constructor([.object()] => collectionsMap) -/// Type of a ArkTS ArrayList object. -fileprivate let arkTSArrayList = ILType.iterable + ILType.object(ofGroup: "ArrayList", withProperties: ["length"], withMethods: ["add", "insert", "has", "getIndexOf", "getLastIndexOf", "removeByIndex", "remove", "removeByRange", "replaceAllElements", "forEach", "sort", "subArrayList", "clear", "clone", "getCapacity", "convertToArray", "isEmpty", "increaseCapacityTo", "trimToCurrentLength"]) +/// Type of the ArkTS ArrayList constructor builtin. +fileprivate let arkTSArrayListConstructor = ILType.constructor([] => arkTSArrayList) /// ObjectGroup modelling ArkTS Stack objects fileprivate let arkTSStacks = ObjectGroup( @@ -212,7 +212,8 @@ fileprivate let arkTSLists = ObjectGroup( ] ) -fileprivate let arrayLists = ObjectGroup( +// ObjectGroup modelling ArkTS ArrayList objects +fileprivate let arkTSArrayLists = ObjectGroup( name: "ArrayList", instanceType: arkTSArrayList, properties: [ @@ -323,7 +324,7 @@ let arkProfile = Profile( arkTSHashSets, arkTSLinkedLists, arkTSLists, - arrayLists, + arkTSArrayLists, ], optionalPostProcessor: nil -- Gitee From 129679dd4da7bafa107b2aee6ebe653d9c0017db Mon Sep 17 00:00:00 2001 From: z30061262 Date: Thu, 13 Jun 2024 19:32:14 +0800 Subject: [PATCH 3/3] Specify return type of convertToArray in arkTSArrayLists --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index 2132e20..0f6234d 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -49,11 +49,11 @@ fileprivate let arkTSHashSet = ILType.iterable + ILType.object(ofGroup: "HashSet fileprivate let arkTSLinkedList = ILType.iterable + ILType.object(ofGroup: "LinkedList", withProperties: ["length"], withMethods: ["add", "addFirst", "insert", "has", "get", "getLastIndexOf", "getIndexOf", "removeByIndex", "removeFirst", "removeLast", "remove", "removeFirstFound", "removeLastFound", "clone", "forEach", "clear", "set", "convertToArray", "getFirst", "getLast"]) /// Type of a ArkTS List object. fileprivate let arkTSList = ILType.iterable + ILType.object(ofGroup: "List", withProperties: ["length"], withMethods: ["add", "insert", "has", "get", "getLastIndexOf", "getIndexOf", "equal", "removeByIndex", "remove", "replaceAllElements", "forEach", "sort", "getSubList", "clear", "set", "convertToArray", "isEmpty", "getFirst", "getLast"]) +/// Type of a ArkTS ArrayList object. +fileprivate let arkTSArrayList = ILType.iterable + ILType.object(ofGroup: "ArrayList", withProperties: ["length"], withMethods: ["add", "insert", "has", "getIndexOf", "getLastIndexOf", "removeByIndex", "remove", "removeByRange", "replaceAllElements", "forEach", "sort", "subArrayList", "clear", "clone", "getCapacity", "convertToArray", "isEmpty", "increaseCapacityTo", "trimToCurrentLength"]) /// 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"]) -/// Type of a ArkTS ArrayList object. -fileprivate let arkTSArrayList = ILType.iterable + ILType.object(ofGroup: "ArrayList", withProperties: ["length"], withMethods: ["add", "insert", "has", "getIndexOf", "getLastIndexOf", "removeByIndex", "remove", "removeByRange", "replaceAllElements", "forEach", "sort", "subArrayList", "clear", "clone", "getCapacity", "convertToArray", "isEmpty", "increaseCapacityTo", "trimToCurrentLength"]) /// Type of the ArkTS Stack constructor builtin. fileprivate let arkTSStackConstructor = ILType.constructor([] => arkTSStack) @@ -65,11 +65,12 @@ fileprivate let arkTSHashSetConstructor = ILType.constructor([] => arkTSHashSet) fileprivate let arkTSLinkedListConstructor = ILType.constructor([] => arkTSLinkedList) /// Type of the ArkTS List constructor builtin. fileprivate let arkTSListConstructor = ILType.constructor([] => arkTSList) +/// Type of the ArkTS ArrayList constructor builtin. +fileprivate let arkTSArrayListConstructor = ILType.constructor([] => arkTSArrayList) /// Type of the ArkTs CollectionsMap constructor builtin. fileprivate let collectionsMapConstructor = ILType.constructor([.object()] => collectionsMap) -/// Type of the ArkTS ArrayList constructor builtin. -fileprivate let arkTSArrayListConstructor = ILType.constructor([] => arkTSArrayList) + /// ObjectGroup modelling ArkTS Stack objects fileprivate let arkTSStacks = ObjectGroup( @@ -235,7 +236,7 @@ fileprivate let arkTSArrayLists = ObjectGroup( "clear" : [] => .undefined, "clone" : [] => arkTSArrayList, "getCapacity" : [] => .number, - "convertToArray" : [] => .object(), + "convertToArray" : [] => .jsArray, "isEmpty" : [] => .boolean, "increaseCapacityTo" : [.number] => .undefined, "trimToCurrentLength": [] => .undefined, -- Gitee