Bug 1602862: Add checks for invalid StringClassFlags r=jld

Differential Revision: https://phabricator.services.mozilla.com/D99271
This commit is contained in:
Randell Jesup 2021-04-20 19:34:03 +00:00
parent f8a731e34e
commit ea0d4c8068
2 changed files with 9 additions and 2 deletions

View file

@ -69,7 +69,10 @@ enum class StringDataFlags : uint16_t {
INLINE = 1 << 4,
// mData points to a string literal; DataFlags::TERMINATED will also be set
LITERAL = 1 << 5
LITERAL = 1 << 5,
// used to check for invalid flags -- all bits above the last item
INVALID_MASK = (uint16_t) ~((LITERAL << 1) - 1)
};
// bits for mClassFlags
@ -78,7 +81,9 @@ enum class StringClassFlags : uint16_t {
// with nsTAutoStringN
INLINE = 1 << 0,
// |this| requires its buffer is null-terminated
NULL_TERMINATED = 1 << 1
NULL_TERMINATED = 1 << 1,
// used to check for invalid flags -- all bits above the last item
INVALID_MASK = (uint16_t) ~((NULL_TERMINATED << 1) - 1)
};
MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(StringDataFlags)

View file

@ -1057,6 +1057,8 @@ class nsTSubstring : public mozilla::detail::nsTStringRepr<T> {
protected:
void AssertValid() {
MOZ_DIAGNOSTIC_ASSERT(!(this->mClassFlags & ClassFlags::INVALID_MASK));
MOZ_DIAGNOSTIC_ASSERT(!(this->mDataFlags & DataFlags::INVALID_MASK));
MOZ_ASSERT(!(this->mClassFlags & ClassFlags::NULL_TERMINATED) ||
(this->mDataFlags & DataFlags::TERMINATED),
"String classes whose static type guarantees a null-terminated "