Bug 1465860 - Don't crash in JS IPC on invalid object id. r=evilpie
Instead, return an error up to the caller, who can return an IPC error, which will kill the child. This is significantly friendlier to fuzzing. MozReview-Commit-ID: C67xSqUeN1i
This commit is contained in:
@@ -29,7 +29,7 @@ class ObjectId {
|
||||
explicit ObjectId(uint64_t serialNumber, bool hasXrayWaiver)
|
||||
: serialNumber_(serialNumber), hasXrayWaiver_(hasXrayWaiver)
|
||||
{
|
||||
if (MOZ_UNLIKELY(serialNumber == 0 || serialNumber > SERIAL_NUMBER_MAX))
|
||||
if (isInvalidSerialNumber(serialNumber))
|
||||
MOZ_CRASH("Bad CPOW Id");
|
||||
}
|
||||
|
||||
@@ -49,8 +49,11 @@ class ObjectId {
|
||||
}
|
||||
|
||||
static ObjectId nullId() { return ObjectId(); }
|
||||
static ObjectId deserialize(uint64_t data) {
|
||||
return ObjectId(data >> FLAG_BITS, data & 1);
|
||||
static Maybe<ObjectId> deserialize(uint64_t data) {
|
||||
if (isInvalidSerialNumber(data >> FLAG_BITS)) {
|
||||
return Nothing();
|
||||
}
|
||||
return Some(ObjectId(data >> FLAG_BITS, data & 1));
|
||||
}
|
||||
|
||||
// For use with StructGCPolicy.
|
||||
@@ -60,6 +63,10 @@ class ObjectId {
|
||||
private:
|
||||
ObjectId() : serialNumber_(0), hasXrayWaiver_(false) {}
|
||||
|
||||
static bool isInvalidSerialNumber(uint64_t aSerialNumber) {
|
||||
return aSerialNumber == 0 || aSerialNumber > SERIAL_NUMBER_MAX;
|
||||
}
|
||||
|
||||
uint64_t serialNumber_ : SERIAL_NUMBER_BITS;
|
||||
bool hasXrayWaiver_ : 1;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user