From 0f4932f86ac322462e17652e1a725990365a543f Mon Sep 17 00:00:00 2001 From: z30061262 Date: Thu, 11 Jul 2024 22:08:15 +0800 Subject: [PATCH] Added BitVector API --- Sources/FuzzilliCli/Profiles/ArkProfile.swift | 34 ++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/Sources/FuzzilliCli/Profiles/ArkProfile.swift b/Sources/FuzzilliCli/Profiles/ArkProfile.swift index d41df29..e87ee34 100644 --- a/Sources/FuzzilliCli/Profiles/ArkProfile.swift +++ b/Sources/FuzzilliCli/Profiles/ArkProfile.swift @@ -44,7 +44,7 @@ fileprivate let ArkTSObjectInstanceGenerator = ValueGenerator("ArkTSObjectInstan /// ArkTS collections Generators fileprivate let ArkTSCollectionsObjectInstanceGenerator = ValueGenerator("ArkTSCollectionsObjectInstanceGenerator") { b, n in - let builtin = chooseUniform(from: ["SharedMap", "SharedSet", "SharedArray", "SendableArrayBuffer"]) + let builtin = chooseUniform(from: ["SharedMap", "SharedSet", "SharedArray", "SendableArrayBuffer", "BitVector"]) let constructor = b.loadBuiltin(builtin) b.construct(constructor) } @@ -109,6 +109,8 @@ fileprivate let collectionsArrayBuffer = ILType.object(ofGroup: "SendableArrayBu fileprivate func collectionsTypedArray(_ variant: String) -> ILType { return .iterable + .object(ofGroup: variant, withProperties: ["buffer", "byteOffset", "byteLength", "length","BYTES_PER_ELEMENT"], withMethods: ["from", "copyWithin", "some", "every", "fill", "filter", "find", "findIndex", "forEach", "indexOf", "join", "map", "reduce", "reverse", "set", "slice", "sort", "subarray", "at", "includes", "entries", "keys", "values"]) } +/// Type of a ArkTS collectionsBitVector object. +fileprivate let collectionsBitVectorType = ILType.iterable + ILType.object(ofGroup: "BitVector", withProperties: ["length"], withMethods: ["push", "pop", "has", "setBitsByRange", "setAllBits", "getBitsByRange", "resize", "getBitCountByRange", "getIndexOf", "getLastIndexOf", "flipBitByIndex", "flipBitsByRange", "values"]) /// Type of the ArkTS Stack constructor builtin. fileprivate let arkTSStackConstructor = ILType.constructor([] => arkTSStack) @@ -150,6 +152,9 @@ fileprivate func collectionsTypedArrayConstructor(_ variant: String) -> ILType { // TODO Also allow SendableArrayBuffers for first argument return .constructor([.opt(.object(ofGroup: "SendableArrayBuffer")), .opt(.integer), .opt(.integer)] => collectionsTypedArray(variant)) } +/// Type of the ArkTs collectionsBitVector constructor builtin. +fileprivate let collectionsBitVectorConstructor = ILType.constructor([.number] => collectionsBitVectorType) + /// Type of the ArkTSUtils.ASON object builtin. fileprivate let arkTSASONObject = ILType.object(ofGroup: "ASON", withMethods: ["parse", "stringify"]) @@ -322,6 +327,31 @@ fileprivate func collectionsTypedArrays(_ variant: String) -> ObjectGroup { ) } +/// ObjectGroup modelling ArkTs BitVector objects +fileprivate let collectionsBitVectors = ObjectGroup( + name: "BitVector", + instanceType: collectionsBitVectorType, + properties: [ + "length" : .number, + ], + methods: [ + "push" : [.number] => .boolean, + "pop" : [] => .number, + "has" : [.number, .number, .number] => .boolean, + "setBitsByRange" : [.number, .number, .number] => .undefined, + "setAllBits" : [.number] => .undefined, + "getBitsByRange" : [.number, .number] => collectionsBitVectorType, + "resize" : [.number] => .undefined, + "getBitCountByRange" : [.number, .number, .number] => .number, + "getIndexOf" : [.number, .number, .number] => .number, + "getLastIndexOf" : [.number, .number, .number] => .number, + "flipBitByIndex" : [.number] => .undefined, + "flipBitsByRange" : [.number, .number] => .undefined, + "values" : [] => .object(), // returns an iterable iterator + ] +) + + /// ObjectGroup modelling ArkTS HashSet objects fileprivate let arkTSHashSets = ObjectGroup( name: "HashSet", @@ -720,6 +750,7 @@ let arkProfile = Profile( "Deque" : arkTSDequeConstructor, "Queue" : arkTSQueueConstructor, "PlainArray" : plainArrayConstructor, + "BitVector" : collectionsBitVectorConstructor, ], additionalObjectGroups: [ @@ -729,6 +760,7 @@ let arkProfile = Profile( collectionsSets, collectionsArrays, collectionsArrayBuffers, + collectionsBitVectors, collectionsTypedArrays("SharedInt8Array"), collectionsTypedArrays("SharedInt16Array"), collectionsTypedArrays("SharedInt32Array"), -- Gitee