Bug 1283106 part 1 - Guard all methods of gfxSkipCharsIterator with check on mSkipChars. r?jfkthame
MozReview-Commit-ID: 3D2dmylzjTP
--- a/gfx/thebes/gfxSkipChars.cpp
+++ b/gfx/thebes/gfxSkipChars.cpp
@@ -13,16 +13,20 @@ struct SkippedRangeStartComparator
int operator()(const gfxSkipChars::SkippedRange& aRange) const {
return (mOffset < aRange.Start()) ? -1 : 1;
}
};
void
gfxSkipCharsIterator::SetOriginalOffset(int32_t aOffset)
{
+ if (!mSkipChars) {
+ return;
+ }
+
aOffset += mOriginalStringToSkipCharsOffset;
NS_ASSERTION(uint32_t(aOffset) <= mSkipChars->mCharCount,
"Invalid offset");
mOriginalStringOffset = aOffset;
const uint32_t rangeCount = mSkipChars->mRanges.Length();
if (rangeCount == 0) {
@@ -73,16 +77,20 @@ struct SkippedRangeOffsetComparator
int operator()(const gfxSkipChars::SkippedRange& aRange) const {
return (mOffset < aRange.SkippedOffset()) ? -1 : 1;
}
};
void
gfxSkipCharsIterator::SetSkippedOffset(uint32_t aOffset)
{
+ if (!mSkipChars) {
+ return;
+ }
+
NS_ASSERTION((mSkipChars->mRanges.IsEmpty() &&
aOffset <= mSkipChars->mCharCount) ||
(aOffset <= mSkipChars->LastRange().SkippedOffset() +
mSkipChars->mCharCount -
mSkipChars->LastRange().End()),
"Invalid skipped offset");
mSkippedStringOffset = aOffset;
@@ -112,16 +120,20 @@ gfxSkipCharsIterator::SetSkippedOffset(u
const gfxSkipChars::SkippedRange& r = ranges[mCurrentRangeIndex];
mOriginalStringOffset = r.End() + aOffset - r.SkippedOffset();
}
bool
gfxSkipCharsIterator::IsOriginalCharSkipped(int32_t* aRunLength) const
{
+ if (!mSkipChars) {
+ return false;
+ }
+
if (mCurrentRangeIndex == -1) {
// we're before the first skipped range (if any)
if (aRunLength) {
uint32_t end = mSkipChars->mRanges.IsEmpty() ?
mSkipChars->mCharCount : mSkipChars->mRanges[0].Start();
*aRunLength = end - mOriginalStringOffset;
}
return mSkipChars->mCharCount == uint32_t(mOriginalStringOffset);
--- a/gfx/thebes/gfxSkipChars.h
+++ b/gfx/thebes/gfxSkipChars.h
@@ -278,16 +278,19 @@ public:
*/
uint32_t GetSkippedOffset() const
{
return mSkippedStringOffset;
}
int32_t GetOriginalEnd() const
{
+ if (!mSkipChars) {
+ return 0;
+ }
return mSkipChars->GetOriginalCharCount() -
mOriginalStringToSkipCharsOffset;
}
private:
const gfxSkipChars* mSkipChars;
// Current position