Skip to content

Commit 819550e

Browse files
whendrik-cmdV8-internal LUCI CQ
authored andcommitted
Fix invalid code gen in configuration generators
This patch adds checks to prevent the writable property flag or value property from being set at the same time that there are getters or setters. Currently, the configureProperty and configureElement generators often generate invalid programs which raise the following exception: TypeError: Invalid property descriptor. Cannot both specify accessors and a value or writable attribute This happens usually because the property flags, which include the writable property bit (bit 0), are set to a random 8 bit integer. Bug: 40272934 Change-Id: I3e9ce83a12c6e384064a4f430230f504d177b159 Reviewed-on: https://chrome-internal-review.googlesource.com/c/v8/fuzzilli/+/8543776 Commit-Queue: Hendrik Wüthrich <whendrik@google.com> Reviewed-by: Hendrik Wüthrich <whendrik@google.com> Reviewed-by: Matthias Liedtke <mliedtke@google.com>
1 parent f661557 commit 819550e

2 files changed

Lines changed: 13 additions & 9 deletions

File tree

Sources/Fuzzilli/CodeGen/CodeGenerators.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,14 +1014,14 @@ public let CodeGenerators: [CodeGenerator] = [
10141014
b.configureProperty(propertyName, of: obj, usingFlags: PropertyFlags.random(), as: .value(b.randomJsVariable()))
10151015
}, {
10161016
guard let getterFunc = b.randomVariable(ofType: .function()) else { return }
1017-
b.configureProperty(propertyName, of: obj, usingFlags: PropertyFlags.random(), as: .getter(getterFunc))
1017+
b.configureProperty(propertyName, of: obj, usingFlags: PropertyFlags.randomWithoutWritable(), as: .getter(getterFunc))
10181018
}, {
10191019
guard let setterFunc = b.randomVariable(ofType: .function()) else { return }
1020-
b.configureProperty(propertyName, of: obj, usingFlags: PropertyFlags.random(), as: .setter(setterFunc))
1020+
b.configureProperty(propertyName, of: obj, usingFlags: PropertyFlags.randomWithoutWritable(), as: .setter(setterFunc))
10211021
}, {
10221022
guard let getterFunc = b.randomVariable(ofType: .function()) else { return }
10231023
guard let setterFunc = b.randomVariable(ofType: .function()) else { return }
1024-
b.configureProperty(propertyName, of: obj, usingFlags: PropertyFlags.random(), as: .getterSetter(getterFunc, setterFunc))
1024+
b.configureProperty(propertyName, of: obj, usingFlags: PropertyFlags.randomWithoutWritable(), as: .getterSetter(getterFunc, setterFunc))
10251025
})
10261026
},
10271027

@@ -1056,14 +1056,14 @@ public let CodeGenerators: [CodeGenerator] = [
10561056
b.configureElement(index, of: obj, usingFlags: PropertyFlags.random(), as: .value(b.randomJsVariable()))
10571057
}, {
10581058
guard let getterFunc = b.randomVariable(ofType: .function()) else { return }
1059-
b.configureElement(index, of: obj, usingFlags: PropertyFlags.random(), as: .getter(getterFunc))
1059+
b.configureElement(index, of: obj, usingFlags: PropertyFlags.randomWithoutWritable(), as: .getter(getterFunc))
10601060
}, {
10611061
guard let setterFunc = b.randomVariable(ofType: .function()) else { return }
1062-
b.configureElement(index, of: obj, usingFlags: PropertyFlags.random(), as: .setter(setterFunc))
1062+
b.configureElement(index, of: obj, usingFlags: PropertyFlags.randomWithoutWritable(), as: .setter(setterFunc))
10631063
}, {
10641064
guard let getterFunc = b.randomVariable(ofType: .function()) else { return }
10651065
guard let setterFunc = b.randomVariable(ofType: .function()) else { return }
1066-
b.configureElement(index, of: obj, usingFlags: PropertyFlags.random(), as: .getterSetter(getterFunc, setterFunc))
1066+
b.configureElement(index, of: obj, usingFlags: PropertyFlags.randomWithoutWritable(), as: .getterSetter(getterFunc, setterFunc))
10671067
})
10681068
},
10691069

@@ -1098,14 +1098,14 @@ public let CodeGenerators: [CodeGenerator] = [
10981098
b.configureComputedProperty(propertyName, of: obj, usingFlags: PropertyFlags.random(), as: .value(b.randomJsVariable()))
10991099
}, {
11001100
guard let getterFunc = b.randomVariable(ofType: .function()) else { return }
1101-
b.configureComputedProperty(propertyName, of: obj, usingFlags: PropertyFlags.random(), as: .getter(getterFunc))
1101+
b.configureComputedProperty(propertyName, of: obj, usingFlags: PropertyFlags.randomWithoutWritable(), as: .getter(getterFunc))
11021102
}, {
11031103
guard let setterFunc = b.randomVariable(ofType: .function()) else { return }
1104-
b.configureComputedProperty(propertyName, of: obj, usingFlags: PropertyFlags.random(), as: .setter(setterFunc))
1104+
b.configureComputedProperty(propertyName, of: obj, usingFlags: PropertyFlags.randomWithoutWritable(), as: .setter(setterFunc))
11051105
}, {
11061106
guard let getterFunc = b.randomVariable(ofType: .function()) else { return }
11071107
guard let setterFunc = b.randomVariable(ofType: .function()) else { return }
1108-
b.configureComputedProperty(propertyName, of: obj, usingFlags: PropertyFlags.random(), as: .getterSetter(getterFunc, setterFunc))
1108+
b.configureComputedProperty(propertyName, of: obj, usingFlags: PropertyFlags.randomWithoutWritable(), as: .getterSetter(getterFunc, setterFunc))
11091109
})
11101110
},
11111111

Sources/Fuzzilli/FuzzIL/JsOperations.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1061,6 +1061,10 @@ public struct PropertyFlags: OptionSet {
10611061
public static func random() -> PropertyFlags {
10621062
return PropertyFlags(rawValue: UInt8.random(in: 0..<8))
10631063
}
1064+
1065+
public static func randomWithoutWritable() -> PropertyFlags {
1066+
return PropertyFlags(rawValue: UInt8.random(in: 0..<8) & 0b1111_1110)
1067+
}
10641068
}
10651069

10661070
enum PropertyType: CaseIterable {

0 commit comments

Comments
 (0)