summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST/Expr.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2014-01-19 06:31:34 +0000
committerTed Kremenek <kremenek@apple.com>2014-01-19 06:31:34 +0000
commit256bd96d1c2464b0f0ecb482ca52075a3158f6a1 (patch)
treeb9dab60996484e9cc2df24b53db6734ae965acbd /clang/lib/AST/Expr.cpp
parentcc742dd9e4e9b625733fd0de83476da461f9efe0 (diff)
downloadbcm5719-llvm-256bd96d1c2464b0f0ecb482ca52075a3158f6a1.tar.gz
bcm5719-llvm-256bd96d1c2464b0f0ecb482ca52075a3158f6a1.zip
Harden InitListExpr::isStringLiteralInit() against getInit() returning null.
This led to a crash on invalid code (sorry, no good test case). Fixes <rdar://problem/15831804>. llvm-svn: 199571
Diffstat (limited to 'clang/lib/AST/Expr.cpp')
-rw-r--r--clang/lib/AST/Expr.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/AST/Expr.cpp b/clang/lib/AST/Expr.cpp
index 842b8c7fdef..154aa4c5380 100644
--- a/clang/lib/AST/Expr.cpp
+++ b/clang/lib/AST/Expr.cpp
@@ -1869,7 +1869,11 @@ bool InitListExpr::isStringLiteralInit() const {
const ArrayType *AT = getType()->getAsArrayTypeUnsafe();
if (!AT || !AT->getElementType()->isIntegerType())
return false;
- const Expr *Init = getInit(0)->IgnoreParens();
+ // It is possible for getInit() to return null.
+ const Expr *Init = getInit(0);
+ if (!Init)
+ return false;
+ Init = Init->IgnoreParens();
return isa<StringLiteral>(Init) || isa<ObjCEncodeExpr>(Init);
}
OpenPOWER on IntegriCloud