From 8ca0a7261b7d7e6d09d586c9d2df705324407442 Mon Sep 17 00:00:00 2001 From: Vadim Afanasyev Date: Wed, 12 Jun 2024 15:06:58 +0800 Subject: [PATCH] Added OHOS List API support --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 43 +++++++++++++++++-- 1 file changed, 40 insertions(+), 3 deletions(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index 32f74d3..a2f961a 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -27,12 +27,12 @@ fileprivate let RunNearStackLimitGenerator = CodeGenerator("RunNearStackLimitGen /// ArkTS Generators fileprivate let ArkTSObjectInstanceGenerator = ValueGenerator("ArkTSObjectInstanceGenerator") { b, n in - let builtin = chooseUniform(from: ["Stack", "HashMap", "HashSet", "LinkedList"]) + let builtin = chooseUniform(from: ["Stack", "HashMap", "HashSet", "LinkedList", "List"]) let constructor = b.loadBuiltin(builtin) b.construct(constructor) } -/// ArkTS collections Generators +/// ArkTS Collections Generators fileprivate let ArkTSCollectionsObjectInstanceGenerator = ValueGenerator("ArkTSCollectionsObjectInstanceGenerator") { b, n in let builtin = chooseUniform(from: ["SharedMap"]) let constructor = b.loadBuiltin(builtin) @@ -47,6 +47,8 @@ fileprivate let arkTSHashMap = ILType.iterable + ILType.object(ofGroup: "HashMap fileprivate let arkTSHashSet = ILType.iterable + ILType.object(ofGroup: "HashSet", withProperties: ["length"], withMethods: ["isEmpty", "has", "add", "remove", "clear", "values", "forEach", "entries"]) /// Type of a ArkTS LinkedList object. 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"]) /// 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"]) @@ -59,6 +61,8 @@ fileprivate let arkTSHashMapConstructor = ILType.constructor([] => arkTSHashMap) fileprivate let arkTSHashSetConstructor = ILType.constructor([] => arkTSHashSet) /// Type of the ArkTS LinkedList constructor builtin. fileprivate let arkTSLinkedListConstructor = ILType.constructor([] => arkTSLinkedList) +/// Type of the ArkTS List constructor builtin. +fileprivate let arkTSListConstructor = ILType.constructor([] => arkTSList) /// Type of the ArkTs CollectionsMap constructor builtin. fileprivate let collectionsMapConstructor = ILType.constructor([.object()] => collectionsMap) @@ -174,6 +178,36 @@ fileprivate let arkTSLinkedLists = ObjectGroup( ] ) +// ObjectGroup modelling ArkTS List objects +fileprivate let arkTSLists = ObjectGroup( + name: "List", + instanceType: arkTSList, + properties: [ + "length" : .number, + ], + methods: [ + "add" : [.anything] => .boolean, + "insert" : [.anything, .number] => .undefined, + "has" : [.anything] => .boolean, + "get" : [.number] => .anything, + "getLastIndexOf" : [.anything] => .number, + "getIndexOf" : [.anything] => .number, + "equal" : [.object()] => .boolean, + "removeByIndex" : [.number] => .anything, + "remove" : [.anything] => .boolean, + "replaceAllElements" : [.function([.anything, .opt(.number), .opt(arkTSList)] => .anything), .opt(.object())] => .undefined, + "forEach" : [.function([.anything, .opt(.number), .opt(arkTSList)] => .undefined), .opt(.object())] => .undefined, + "sort" : [.function([.anything, .anything] => .number)] => .undefined, + "getSubList" : [.number, .number] => arkTSList, + "clear" : [] => .undefined, + "set" : [.number, .anything] => .anything, + "convertToArray" : [] => .jsArray, + "isEmpty" : [] => .boolean, + "getFirst" : [] => .anything, + "getLast" : [] => .anything, + ] +) + let arkProfile = Profile( processArgs: { randomize in var args = [ @@ -187,7 +221,7 @@ let arkProfile = Profile( maxExecsBeforeRespawn: 10000, - timeout: 217400, + timeout: 305600, codePrefix: """ let arkPrivate = globalThis.ArkPrivate; @@ -195,6 +229,7 @@ let arkProfile = Profile( var HashMap = arkPrivate.Load(arkPrivate.HashMap); var HashSet = arkPrivate.Load(arkPrivate.HashSet); var LinkedList = arkPrivate.Load(arkPrivate.LinkedList); + var List = arkPrivate.Load(arkPrivate.List); function bgc() { for(let i=0; i<0x10000; i+=1) {new String();} @@ -243,6 +278,7 @@ let arkProfile = Profile( "SharedMap" : collectionsMapConstructor, "HashSet" : arkTSHashSetConstructor, "LinkedList" : arkTSLinkedListConstructor, + "List" : arkTSListConstructor, ], additionalObjectGroups: [ @@ -251,6 +287,7 @@ let arkProfile = Profile( collectionsMaps, arkTSHashSets, arkTSLinkedLists, + arkTSLists, ], optionalPostProcessor: nil -- Gitee