allow path.add(path) safely
Bug: 882423
Change-Id: Ied2ad2d5dfdf00af8f3ba722b522e9602fea5557
Reviewed-on: https://skia-review.googlesource.com/153260
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/core/SkPath.cpp b/src/core/SkPath.cpp
index b51bb2d..09d0a95 100644
--- a/src/core/SkPath.cpp
+++ b/src/core/SkPath.cpp
@@ -19,6 +19,7 @@
#include "SkPointPriv.h"
#include "SkRRect.h"
#include "SkSafeMath.h"
+#include "SkTLazy.h"
#include "SkTo.h"
#include <cmath>
@@ -1577,10 +1578,17 @@
return this->addPath(path, matrix, mode);
}
-SkPath& SkPath::addPath(const SkPath& path, const SkMatrix& matrix, AddPathMode mode) {
- SkPathRef::Editor(&fPathRef, path.countVerbs(), path.countPoints());
+SkPath& SkPath::addPath(const SkPath& srcPath, const SkMatrix& matrix, AddPathMode mode) {
+ // Detect if we're trying to add ourself
+ const SkPath* src = &srcPath;
+ SkTLazy<SkPath> tmp;
+ if (this == src) {
+ src = tmp.set(srcPath);
+ }
- RawIter iter(path);
+ SkPathRef::Editor(&fPathRef, src->countVerbs(), src->countPoints());
+
+ RawIter iter(*src);
SkPoint pts[4];
Verb verb;