Improved DSL Array error checking
Change-Id: I4b1235f7363309bd2aa3e2f1b3e00c94b43976bb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/430058
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
diff --git a/src/sksl/dsl/DSLType.cpp b/src/sksl/dsl/DSLType.cpp
index 109e0f4..7a24797 100644
--- a/src/sksl/dsl/DSLType.cpp
+++ b/src/sksl/dsl/DSLType.cpp
@@ -187,7 +187,13 @@
}
DSLType Array(const DSLType& base, int count) {
- SkASSERT(count >= 1);
+ if (count <= 0) {
+ DSLWriter::ReportError("error: array size must be positive\n");
+ }
+ if (base.isArray()) {
+ DSLWriter::ReportError("error: multidimensional arrays are not permitted\n");
+ return base;
+ }
return DSLWriter::SymbolTable()->addArrayDimension(&base.skslType(), count);
}
diff --git a/tests/SkSLDSLTest.cpp b/tests/SkSLDSLTest.cpp
index dbd55ca..216d27e 100644
--- a/tests/SkSLDSLTest.cpp
+++ b/tests/SkSLDSLTest.cpp
@@ -556,6 +556,16 @@
DSLExpression e = x + 1;
REPORTER_ASSERT(r, e.type().isFloat());
e.release();
+
+ {
+ ExpectError error(r, "error: array size must be positive\n");
+ Array(kFloat_Type, -1);
+ }
+
+ {
+ ExpectError error(r, "error: multidimensional arrays are not permitted\n");
+ Array(Array(kFloat_Type, 2), 2);
+ }
}
DEF_GPUTEST_FOR_MOCK_CONTEXT(DSLMatrices, r, ctxInfo) {