aboutsummaryrefslogtreecommitdiffhomepage
path: root/tests/PictureBBHTest.cpp
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2017-04-07 10:46:39 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-04-10 13:11:34 +0000
commit1dd161c833927d61d436fed68a80b07e44c65226 (patch)
tree7de47854282f9e609a0f22c711ccdc4fd8fb1f95 /tests/PictureBBHTest.cpp
parent4c7754c499d092c8b81fe3c5119aebe4dcfd09f4 (diff)
Fix infinite loop in SkRTree::insert()
When aspectRatio is not finite, insert() can fall into an infinite loop. This happens if you pass SkRect::MakeLargest() to the factory as bounds. BUG=skia:5974 Change-Id: Ibcc9e5c5943c718608d4c1448305f7b8f11413bc Reviewed-on: https://skia-review.googlesource.com/11784 Reviewed-by: Mike Klein <mtklein@chromium.org> Commit-Queue: Mike Klein <mtklein@chromium.org>
Diffstat (limited to 'tests/PictureBBHTest.cpp')
-rw-r--r--tests/PictureBBHTest.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/tests/PictureBBHTest.cpp b/tests/PictureBBHTest.cpp
index 69cb443879..64b09b1e03 100644
--- a/tests/PictureBBHTest.cpp
+++ b/tests/PictureBBHTest.cpp
@@ -91,3 +91,15 @@ DEF_TEST(PictureBBH, reporter) {
EmptyClipPictureBBHTest emptyClipPictureTest;
emptyClipPictureTest.run(reporter);
}
+
+DEF_TEST(RTreeMakeLargest, r) {
+ // A call to insert() with 2 or more rects and a bounds of SkRect::MakeLargest()
+ // used to fall into an infinite loop.
+
+ SkRTreeFactory factory;
+ std::unique_ptr<SkBBoxHierarchy> bbh{ factory(SkRect::MakeLargest()) };
+
+ SkRect rects[] = { {0,0, 10,10}, {5,5,15,15} };
+ bbh->insert(rects, SK_ARRAY_COUNT(rects));
+ REPORTER_ASSERT(r, bbh->getRootBound() == SkRect::MakeWH(15,15));
+}