Bug 1240241 - Don't recurse infinitely in FilterCachedColorModels::ForColorModel if the original filter node was null. r?roc draft
authorMarkus Stange <mstange@themasta.com>
Wed, 20 Jan 2016 22:45:58 +0100
changeset 323671 efd08702c716f99ce2256756b32314dc791f73bb
parent 323670 262c65145b8df42c2cc044d7b6e3a0de23e4315d
child 324104 e85daa58b99e9f69534dd2d23282e253764b24f0
push id9763
push usermstange@themasta.com
push dateWed, 20 Jan 2016 21:47:34 +0000
reviewersroc
bugs1240241
milestone46.0a1
Bug 1240241 - Don't recurse infinitely in FilterCachedColorModels::ForColorModel if the original filter node was null. r?roc
gfx/src/FilterSupport.cpp
--- a/gfx/src/FilterSupport.cpp
+++ b/gfx/src/FilterSupport.cpp
@@ -305,16 +305,23 @@ FilterCachedColorModels::FilterCachedCol
     mFilterForColorModel[2] = clear;
     mFilterForColorModel[3] = clear;
   }
 }
 
 already_AddRefed<FilterNode>
 FilterCachedColorModels::ForColorModel(ColorModel aColorModel)
 {
+  if (aColorModel == mOriginalColorModel) {
+    // Make sure to not call WrapForColorModel if our original filter node was
+    // null, because then we'd get an infinite recursion.
+    RefPtr<FilterNode> filter = mFilterForColorModel[mOriginalColorModel.ToIndex()];
+    return filter.forget();
+  }
+
   if (!mFilterForColorModel[aColorModel.ToIndex()]) {
     mFilterForColorModel[aColorModel.ToIndex()] = WrapForColorModel(aColorModel);
   }
   RefPtr<FilterNode> filter(mFilterForColorModel[aColorModel.ToIndex()]);
   return filter.forget();
 }
 
 already_AddRefed<FilterNode>