diff options
author | 2016-10-14 09:56:33 -0700 | |
---|---|---|
committer | 2016-10-14 09:56:33 -0700 | |
commit | 7effa7a29a04fb417c5e4abbe6aabf576a2aede0 (patch) | |
tree | 99198f5e8447ed269a2262ff91a022b41f8cf41b /src/sksl/SkSLIRGenerator.cpp | |
parent | cce3e58f6660a77e1a6f93d8579a279a2450b0da (diff) |
more SkSL fuzzer crash fixes
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2414413002
Review-Url: https://codereview.chromium.org/2414413002
Diffstat (limited to 'src/sksl/SkSLIRGenerator.cpp')
-rw-r--r-- | src/sksl/SkSLIRGenerator.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/sksl/SkSLIRGenerator.cpp b/src/sksl/SkSLIRGenerator.cpp index 9a42379065..b93cbfbe99 100644 --- a/src/sksl/SkSLIRGenerator.cpp +++ b/src/sksl/SkSLIRGenerator.cpp @@ -525,6 +525,9 @@ std::unique_ptr<InterfaceBlock> IRGenerator::convertInterfaceBlock(const ASTInte std::unique_ptr<VarDeclarations> decl = this->convertVarDeclarations( *intf.fDeclarations[i], Variable::kGlobal_Storage); + if (!decl) { + return nullptr; + } for (const auto& var : decl->fVars) { fields.push_back(Type::Field(var.fVar->fModifiers, var.fVar->fName, &var.fVar->fType)); @@ -1024,11 +1027,17 @@ std::unique_ptr<Expression> IRGenerator::convertConstructor( int rows = args[i]->fType.rows(); args[i] = this->coerce(std::move(args[i]), type.componentType().toCompound(fContext, columns, rows)); + if (!args[i]) { + return nullptr; + } actual += args[i]->fType.rows() * args[i]->fType.columns(); } else if (args[i]->fType.kind() == Type::kScalar_Kind) { actual += 1; if (type.kind() != Type::kScalar_Kind) { args[i] = this->coerce(std::move(args[i]), type.componentType()); + if (!args[i]) { + return nullptr; + } } } else { fErrors.error(position, "'" + args[i]->fType.description() + "' is not a valid " |