From 722d1c0679491360a286dd04c93128484daf75f7 Mon Sep 17 00:00:00 2001 From: Florin Malita Date: Wed, 4 May 2022 10:24:14 -0400 Subject: [PATCH] SkM44::LookAt: handle zero-length vectors gracefully Zero-length vectors cannot be normalized. Bug: oss-fuzz:38738 Change-Id: I6c5f4114f70a8a9f03afc1cd70c871e6b6b520ad Reviewed-on: https://skia-review.googlesource.com/c/skia/+/536637 Auto-Submit: Florin Malita Reviewed-by: Kevin Lubick Commit-Queue: Florin Malita Commit-Queue: Kevin Lubick --- src/core/SkM44.cpp | 6 +++++- tests/MatrixTest.cpp | 6 ++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/core/SkM44.cpp b/src/core/SkM44.cpp index e01499d62e..02b1741763 100644 --- a/src/core/SkM44.cpp +++ b/src/core/SkM44.cpp @@ -321,7 +321,11 @@ SkM44 SkM44::RectToRect(const SkRect& src, const SkRect& dst) { 0.f, 0.f, 0.f, 1.f}; } -static SkV3 normalize(SkV3 v) { return v * (1.0f / v.length()); } +static SkV3 normalize(SkV3 v) { + const auto vlen = v.length(); + + return SkScalarNearlyZero(vlen) ? v : v * (1.0f / vlen); +} static SkV4 v4(SkV3 v, SkScalar w) { return {v.x, v.y, v.z, w}; } diff --git a/tests/MatrixTest.cpp b/tests/MatrixTest.cpp index 22017f6acc..edc7f26de4 100644 --- a/tests/MatrixTest.cpp +++ b/tests/MatrixTest.cpp @@ -1042,3 +1042,9 @@ DEF_TEST(Matrix_mapRect_skbug12335, r) { DEF_TEST(Matrix_Ctor, r) { REPORTER_ASSERT(r, SkMatrix{} == SkMatrix::I()); } + +DEF_TEST(Matrix_LookAt, r) { + // Degenerate inputs should not trigger *SAN errors. + const auto m = SkM44::LookAt({0,0,0}, {0,0,0}, {0,0,0}); + REPORTER_ASSERT(r, m == SkM44()); +}