diff options
author | Ted Kremenek <kremenek@apple.com> | 2014-01-19 06:31:34 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2014-01-19 06:31:34 +0000 |
commit | 256bd96d1c2464b0f0ecb482ca52075a3158f6a1 (patch) | |
tree | b9dab60996484e9cc2df24b53db6734ae965acbd /clang/lib/AST/Expr.cpp | |
parent | cc742dd9e4e9b625733fd0de83476da461f9efe0 (diff) | |
download | bcm5719-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.cpp | 6 |
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); } |