Bug 1283106 part 1 - Guard all methods of gfxSkipCharsIterator with check on mSkipChars. r?jfkthame draft
authorXidorn Quan <me@upsuper.org>
Mon, 04 Jul 2016 10:52:44 +1000
changeset 383408 5dbd1bb188422f32f900a36a68b163a425338e0d
parent 383403 247df56579d7f23a452d4e816bb3989fce30b1d1
child 383409 8c0f9bf9d70d177513aad2f020968920975a0ead
push id22015
push userxquan@mozilla.com
push dateMon, 04 Jul 2016 00:55:26 +0000
reviewersjfkthame
bugs1283106
milestone50.0a1
Bug 1283106 part 1 - Guard all methods of gfxSkipCharsIterator with check on mSkipChars. r?jfkthame MozReview-Commit-ID: 3D2dmylzjTP
gfx/thebes/gfxSkipChars.cpp
gfx/thebes/gfxSkipChars.h
--- 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