From 160f2e8be6236d45553eefa7b78bc8d3baabb63c Mon Sep 17 00:00:00 2001 From: Vadim Afanasyev Date: Fri, 7 Jun 2024 18:55:32 +0800 Subject: [PATCH] Added LinkedList API support --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 40 ++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index 3bcccb3..a87c3d2 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", "LinkedList"]) 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 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 the ArkTS Stack constructor builtin. fileprivate let arkTSStackConstructor = ILType.constructor([] => arkTSStack) @@ -45,6 +47,8 @@ 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 LinkedList constructor builtin. +fileprivate let arkTSLinkedListConstructor = ILType.constructor([] => arkTSLinkedList) /// ObjectGroup modelling ArkTS Stack objects fileprivate let arkTSStacks = ObjectGroup( @@ -106,6 +110,37 @@ fileprivate let arkTSHashSets = ObjectGroup( ] ) +/// ObjectGroup modelling ArkTS LinkedList objects +fileprivate let arkTSLinkedLists = ObjectGroup( + name: "LinkedList", + instanceType: arkTSLinkedList, + properties: [ + "length" : .number, + ], + methods: [ + "add" : [.anything] => .boolean, + "addFirst" : [.anything] => .undefined, + "insert" : [.number, .anything] => .undefined, + "has" : [.anything] => .boolean, + "get" : [.number] => .anything, + "getLastIndexOf" : [.anything] => .number, + "getIndexOf" : [.anything] => .number, + "removeByIndex" : [.number] => .anything, + "removeFirst" : [] => .anything, + "removeLast" : [] => .anything, + "remove" : [.anything] => .boolean, + "removeFirstFound" : [.anything] => .boolean, + "removeLastFound" : [.anything] => .boolean, + "clone" : [] => arkTSLinkedList, + "forEach" : [.function([.anything, .opt(.number), .opt(arkTSLinkedList)] => .undefined), .opt(.object())] => .undefined, + "clear" : [] => .undefined, + "set" : [.number, .anything] => .anything, + "convertToArray" : [] => .jsArray, + "getFirst" : [] => .anything, + "getLast" : [] => .anything, + ] +) + let arkProfile = Profile( processArgs: { randomize in var args = [ @@ -126,6 +161,7 @@ let arkProfile = Profile( var Stack = arkPrivate.Load(arkPrivate.Stack); var HashMap = arkPrivate.Load(arkPrivate.HashMap); var HashSet = arkPrivate.Load(arkPrivate.HashSet); + var LinkedList = arkPrivate.Load(arkPrivate.LinkedList); function bgc() { for(let i=0; i<0x10000; i+=1) {new String();} @@ -171,12 +207,14 @@ let arkProfile = Profile( "Stack" : arkTSStackConstructor, "HashMap" : arkTSHashMapConstructor, "HashSet" : arkTSHashSetConstructor, + "LinkedList" : arkTSLinkedListConstructor, ], additionalObjectGroups: [ arkTSStacks, arkTSHashMaps, arkTSHashSets, + arkTSLinkedLists, ], optionalPostProcessor: nil -- Gitee