Skip to content

Commit ae3d83a

Browse files
LiedtkeV8-internal LUCI CQ
authored andcommitted
[environment] Add DataView prototype and getBigUint64 method
getBigInt64 and getBigUin64 also take an optional second parameter which is a bool to mark if little-endian encoding should be used. Bug: 487347678 Change-Id: I352e74c7e5d74bd72f5c7ae35c8114bceba297d6 Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/9050878 Reviewed-by: Danylo Mocherniuk <mdanylo@google.com> Commit-Queue: Matthias Liedtke <mliedtke@google.com>
1 parent c997133 commit ae3d83a

1 file changed

Lines changed: 39 additions & 23 deletions

File tree

Sources/Fuzzilli/Environment/JavaScriptEnvironment.swift

Lines changed: 39 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,8 @@ public class JavaScriptEnvironment: ComponentBase {
357357
registerObjectGroup(.jsUint8ArrayConstructor)
358358
registerObjectGroup(.jsUint8ArrayPrototype)
359359
registerObjectGroup(.jsDataViews)
360+
registerObjectGroup(.jsDataViewPrototype)
361+
registerObjectGroup(.jsDataViewConstructor)
360362

361363
registerObjectGroup(.jsObjectConstructor)
362364
registerObjectGroup(.jsPromiseConstructor)
@@ -1084,7 +1086,7 @@ public extension ILType {
10841086
static let jsSharedArrayBuffer = ILType.object(ofGroup: "SharedArrayBuffer", withProperties: ["byteLength", "maxByteLength", "growable"], withMethods: ["grow", "slice"])
10851087

10861088
/// Type of a JavaScript DataView object.
1087-
static let jsDataView = ILType.object(ofGroup: "DataView", withProperties: ["buffer", "byteLength", "byteOffset"], withMethods: ["getInt8", "getUint8", "getInt16", "getUint16", "getInt32", "getUint32", "getFloat16", "getFloat32", "getFloat64", "getBigInt64", "setInt8", "setUint8", "setInt16", "setUint16", "setInt32", "setUint32", "setFloat16", "setFloat32", "setFloat64", "setBigInt64"])
1089+
static let jsDataView = ILType.object(ofGroup: "DataView", withProperties: ["buffer", "byteLength", "byteOffset"], withMethods: ["getInt8", "getUint8", "getInt16", "getUint16", "getInt32", "getUint32", "getFloat16", "getFloat32", "getFloat64", "getBigInt64", "getBigUint64", "setInt8", "setUint8", "setInt16", "setUint16", "setInt32", "setUint32", "setFloat16", "setFloat32", "setFloat64", "setBigInt64"])
10881090

10891091
/// Type of a JavaScript TypedArray object of the given variant.
10901092
static func jsTypedArray(_ variant: String) -> ILType {
@@ -1155,7 +1157,7 @@ public extension ILType {
11551157
+ .object(ofGroup: "Uint8ArrayConstructor", withProperties: ["prototype"], withMethods: ["fromBase64", "fromHex"])
11561158

11571159
/// Type of the JavaScript DataView constructor builtin. (TODO Also allow SharedArrayBuffers for first argument)
1158-
static let jsDataViewConstructor = ILType.constructor([.plain(.jsArrayBuffer), .opt(.integer), .opt(.integer)] => .jsDataView)
1160+
static let jsDataViewConstructor = ILType.constructor([.plain(.jsArrayBuffer), .opt(.integer), .opt(.integer)] => .jsDataView) + .object(ofGroup: "DataViewConstructor", withProperties: ["prototype"])
11591161

11601162
/// Type of the JavaScript Promise constructor builtin.
11611163
static let jsPromiseConstructor = ILType.constructor([.function()] => .jsPromise) + .object(ofGroup: "PromiseConstructor", withProperties: ["prototype"], withMethods: ["resolve", "reject", "all", "any", "race", "allSettled", "try"])
@@ -1856,27 +1858,41 @@ public extension ObjectGroup {
18561858
"byteOffset" : .integer
18571859
],
18581860
methods: [
1859-
"getInt8" : [.integer] => .integer,
1860-
"getUint8" : [.integer] => .integer,
1861-
"getInt16" : [.integer] => .integer,
1862-
"getUint16" : [.integer] => .integer,
1863-
"getInt32" : [.integer] => .integer,
1864-
"getUint32" : [.integer] => .integer,
1865-
"getFloat16" : [.integer] => .float,
1866-
"getFloat32" : [.integer] => .float,
1867-
"getFloat64" : [.integer] => .float,
1868-
"getBigInt64": [.integer] => .bigint,
1869-
"setInt8" : [.integer, .integer] => .undefined,
1870-
"setUint8" : [.integer, .integer] => .undefined,
1871-
"setInt16" : [.integer, .integer] => .undefined,
1872-
"setUint16" : [.integer, .integer] => .undefined,
1873-
"setInt32" : [.integer, .integer] => .undefined,
1874-
"setUint32" : [.integer, .integer] => .undefined,
1875-
"setFloat16" : [.integer, .float] => .undefined,
1876-
"setFloat32" : [.integer, .float] => .undefined,
1877-
"setFloat64" : [.integer, .float] => .undefined,
1878-
"setBigInt64": [.integer, .bigint] => .undefined,
1879-
]
1861+
"getInt8" : [.integer] => .integer,
1862+
"getUint8" : [.integer] => .integer,
1863+
"getInt16" : [.integer] => .integer,
1864+
"getUint16" : [.integer] => .integer,
1865+
"getInt32" : [.integer] => .integer,
1866+
"getUint32" : [.integer] => .integer,
1867+
"getFloat16" : [.integer] => .float,
1868+
"getFloat32" : [.integer] => .float,
1869+
"getFloat64" : [.integer] => .float,
1870+
"getBigInt64" : [.integer, .opt(.boolean)] => .bigint,
1871+
"getBigUint64": [.integer, .opt(.boolean)] => .bigint,
1872+
"setInt8" : [.integer, .integer] => .undefined,
1873+
"setUint8" : [.integer, .integer] => .undefined,
1874+
"setInt16" : [.integer, .integer] => .undefined,
1875+
"setUint16" : [.integer, .integer] => .undefined,
1876+
"setInt32" : [.integer, .integer] => .undefined,
1877+
"setUint32" : [.integer, .integer] => .undefined,
1878+
"setFloat16" : [.integer, .float] => .undefined,
1879+
"setFloat32" : [.integer, .float] => .undefined,
1880+
"setFloat64" : [.integer, .float] => .undefined,
1881+
"setBigInt64" : [.integer, .bigint] => .undefined,
1882+
]
1883+
)
1884+
1885+
static let jsDataViewPrototype = createPrototypeObjectGroup(jsDataViews,
1886+
constructor: .jsDataViewConstructor)
1887+
1888+
static let jsDataViewConstructor = ObjectGroup(
1889+
name: "DataViewConstructor",
1890+
constructorPath: "DataView",
1891+
instanceType: .jsDataViewConstructor,
1892+
properties: [
1893+
"prototype": jsDataViewPrototype.instanceType,
1894+
],
1895+
methods: [:]
18801896
)
18811897

18821898
static let jsPromisePrototype =

0 commit comments

Comments
 (0)