From 04333c87ebd05ef7236628b4a934c8e05819cdfb Mon Sep 17 00:00:00 2001 From: maorun1 Date: Thu, 6 Jun 2024 17:08:14 +0800 Subject: [PATCH 1/5] add ArktsCollections.Map code generator --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index 71b94d9..6308c32 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -32,16 +32,29 @@ fileprivate let ArkTSObjectInstanceGenerator = ValueGenerator("ArkTSObjectInstan b.construct(constructor) } +/// ArkTS collections Generators +fileprivate let ArkTSCollectionsObjectInstanceGenerator = ValueGenerator("ArkTSCollectionsObjectInstanceGenerator") { b, n in + let builtin = chooseUniform(from: ["SharedMap"]) + let constructor = b.loadBuiltin(builtin) + b.construct(constructor) +} + /// Type of a ArkTS Stack object. fileprivate let arkTSStack = ILType.iterable + ILType.object(ofGroup: "Stack", withProperties: ["length"], withMethods: ["push", "pop", "peek", "locate", "forEach", "isEmpty"]) /// Type of a ArkTS HashMap object. 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"]) +/// 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 the ArkTS Stack constructor builtin. fileprivate let arkTSStackConstructor = ILType.constructor([] => arkTSStack) /// Type of the ArkTS HashMap constructor builtin. fileprivate let arkTSHashMapConstructor = ILType.constructor([] => arkTSHashMap) +/// Type of the ArkTs Map constructor builtin. +fileprivate let collectionsMapConstructor = ILType.constructor([.object()] => collectionsMap) + /// ObjectGroup modelling ArkTS Stack objects fileprivate let arkTSStacks = ObjectGroup( name: "Stack", @@ -83,6 +96,26 @@ fileprivate let arkTSHashMaps = ObjectGroup( ] ) +///ObjectGroup modelling ArkTs Map objects +fileprivate let collectionsMaps = ObjectGroup( + name: "SharedMap", + instanceType: collectionsMap, + properties: [ + "size" : .integer + ], + methods: [ + "entries" : [] => .object(), + "keys" : [] => .object(), + "values" : [] => .object(), + "clear" : [] => .undefined, + "delete" : [.anything] => .boolean, + "forEach" : [.function(), .opt(.object())] => .undefined, + "get" : [.anything] => .anything, + "has" : [.anything] => .boolean, + "set" : [.anything, .anything] => collectionsMap, + ] +) + let arkProfile = Profile( processArgs: { randomize in var args = [ @@ -102,7 +135,7 @@ let arkProfile = Profile( let arkPrivate = globalThis.ArkPrivate; arkPrivate.Load(arkPrivate.Stack); arkPrivate.Load(arkPrivate.HashMap); - + let myMap = new SharedMap(); function bgc() { for(let i=0; i<0x10000; i+=1) {new String();} let a = new Array(0x10000); @@ -125,6 +158,7 @@ let arkProfile = Profile( (PrintGenerator, 40), (RunNearStackLimitGenerator, 5), (ArkTSObjectInstanceGenerator, 20), + (ArkTSCollectionsObjectInstanceGenerator, 50), ], additionalProgramTemplates: WeightedList([]), @@ -146,11 +180,13 @@ let arkProfile = Profile( "bgc" : .function([] => .undefined), "Stack" : arkTSStackConstructor, "HashMap" : arkTSHashMapConstructor, + "SharedMap" : collectionsMapConstructor, ], additionalObjectGroups: [ arkTSStacks, arkTSHashMaps, + collectionsMaps, ], optionalPostProcessor: nil -- Gitee From 3adda400a68faa011a9dc60151d486bfb5069e0d Mon Sep 17 00:00:00 2001 From: maorun1 Date: Thu, 6 Jun 2024 17:08:14 +0800 Subject: [PATCH 2/5] add ArktsCollections.Map code generator --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index 71b94d9..3458800 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -32,16 +32,29 @@ fileprivate let ArkTSObjectInstanceGenerator = ValueGenerator("ArkTSObjectInstan b.construct(constructor) } +/// ArkTS collections Generators +fileprivate let ArkTSCollectionsObjectInstanceGenerator = ValueGenerator("ArkTSCollectionsObjectInstanceGenerator") { b, n in + let builtin = chooseUniform(from: ["SharedMap"]) + let constructor = b.loadBuiltin(builtin) + b.construct(constructor) +} + /// Type of a ArkTS Stack object. fileprivate let arkTSStack = ILType.iterable + ILType.object(ofGroup: "Stack", withProperties: ["length"], withMethods: ["push", "pop", "peek", "locate", "forEach", "isEmpty"]) /// Type of a ArkTS HashMap object. 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"]) +/// 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 the ArkTS Stack constructor builtin. fileprivate let arkTSStackConstructor = ILType.constructor([] => arkTSStack) /// Type of the ArkTS HashMap constructor builtin. fileprivate let arkTSHashMapConstructor = ILType.constructor([] => arkTSHashMap) +/// Type of the ArkTs Map constructor builtin. +fileprivate let collectionsMapConstructor = ILType.constructor([.object()] => collectionsMap) + /// ObjectGroup modelling ArkTS Stack objects fileprivate let arkTSStacks = ObjectGroup( name: "Stack", @@ -83,6 +96,26 @@ fileprivate let arkTSHashMaps = ObjectGroup( ] ) +///ObjectGroup modelling ArkTs Map objects +fileprivate let collectionsMaps = ObjectGroup( + name: "SharedMap", + instanceType: collectionsMap, + properties: [ + "size" : .integer + ], + methods: [ + "entries" : [] => .object(), + "keys" : [] => .object(), + "values" : [] => .object(), + "clear" : [] => .undefined, + "delete" : [.anything] => .boolean, + "forEach" : [.function(), .opt(.object())] => .undefined, + "get" : [.anything] => .anything, + "has" : [.anything] => .boolean, + "set" : [.anything, .anything] => collectionsMap, + ] +) + let arkProfile = Profile( processArgs: { randomize in var args = [ @@ -102,7 +135,7 @@ let arkProfile = Profile( let arkPrivate = globalThis.ArkPrivate; arkPrivate.Load(arkPrivate.Stack); arkPrivate.Load(arkPrivate.HashMap); - + let myMap = new SharedMap(); function bgc() { for(let i=0; i<0x10000; i+=1) {new String();} let a = new Array(0x10000); @@ -125,6 +158,7 @@ let arkProfile = Profile( (PrintGenerator, 40), (RunNearStackLimitGenerator, 5), (ArkTSObjectInstanceGenerator, 20), + (ArkTSCollectionsObjectInstanceGenerator, 20), ], additionalProgramTemplates: WeightedList([]), @@ -146,11 +180,13 @@ let arkProfile = Profile( "bgc" : .function([] => .undefined), "Stack" : arkTSStackConstructor, "HashMap" : arkTSHashMapConstructor, + "SharedMap" : collectionsMapConstructor, ], additionalObjectGroups: [ arkTSStacks, arkTSHashMaps, + collectionsMaps, ], optionalPostProcessor: nil -- Gitee From 5602217cdf7bbc8d6800393089bf39c095247774 Mon Sep 17 00:00:00 2001 From: maorun1 Date: Fri, 7 Jun 2024 01:55:50 +0000 Subject: [PATCH 3/5] update Sources/FuzzilliCli/Profiles/ArkProfile.swift. Signed-off-by: maorun1 --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 2 -- 1 file changed, 2 deletions(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index bf6b5d9..e2eeae1 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -156,8 +156,6 @@ let arkProfile = Profile( codePrefix: """ let arkPrivate = globalThis.ArkPrivate; - arkPrivate.Load(arkPrivate.Stack); - arkPrivate.Load(arkPrivate.HashMap); var Stack = arkPrivate.Load(arkPrivate.Stack); var HashMap = arkPrivate.Load(arkPrivate.HashMap); var HashSet = arkPrivate.Load(arkPrivate.HashSet); -- Gitee From a150ff9725ac7d979f0900e3ad70f22a0c5f009f Mon Sep 17 00:00:00 2001 From: maorun1 Date: Fri, 7 Jun 2024 03:48:59 +0000 Subject: [PATCH 4/5] update Sources/FuzzilliCli/Profiles/ArkProfile.swift. Signed-off-by: maorun1 --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index e2eeae1..0caa02c 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -179,9 +179,9 @@ let arkProfile = Profile( crashTests: ["fuzzilli('FUZZILLI_CRASH', 0)", "fuzzilli('FUZZILLI_CRASH', 1)"], additionalCodeGenerators: [ - (PrintGenerator, 40), - (RunNearStackLimitGenerator, 5), - (ArkTSObjectInstanceGenerator, 20), + (PrintGenerator, 40), + (RunNearStackLimitGenerator, 5), + (ArkTSObjectInstanceGenerator, 20), (ArkTSCollectionsObjectInstanceGenerator, 20), ], -- Gitee From 6b3fb5dcd0ef9388b573015761e8b8c0b81401d9 Mon Sep 17 00:00:00 2001 From: maorun1 Date: Fri, 7 Jun 2024 06:17:16 +0000 Subject: [PATCH 5/5] update Sources/FuzzilliCli/Profiles/ArkProfile.swift. Signed-off-by: maorun1 --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index 0caa02c..e758468 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -105,7 +105,7 @@ fileprivate let collectionsMaps = ObjectGroup( name: "SharedMap", instanceType: collectionsMap, properties: [ - "size" : .integer + "size" : .number ], methods: [ "entries" : [] => .object(), @@ -113,7 +113,7 @@ fileprivate let collectionsMaps = ObjectGroup( "values" : [] => .object(), "clear" : [] => .undefined, "delete" : [.anything] => .boolean, - "forEach" : [.function(), .opt(.object())] => .undefined, + "forEach" : [.function([.opt(.anything), .opt(.anything), .opt(collectionsMap)] => .undefined), .opt(.object())] => .undefined, "get" : [.anything] => .anything, "has" : [.anything] => .boolean, "set" : [.anything, .anything] => collectionsMap, -- Gitee