summaryrefslogtreecommitdiffstats
path: root/libcxxabi
diff options
context:
space:
mode:
authorErik Pilkington <erik.pilkington@gmail.com>2018-02-05 02:34:41 +0000
committerErik Pilkington <erik.pilkington@gmail.com>2018-02-05 02:34:41 +0000
commit0923542c61cdbaa255c4336575c4b21d0c6779e8 (patch)
tree288d80496265e55ba3a7af20b13e6e941721365a /libcxxabi
parent0398ccd0c98ed255eabb0086cb48b34698c286bc (diff)
downloadbcm5719-llvm-0923542c61cdbaa255c4336575c4b21d0c6779e8.tar.gz
bcm5719-llvm-0923542c61cdbaa255c4336575c4b21d0c6779e8.zip
[demangler] return early if conditional expr parsing failed
This should fix some bugs found by oss-fuzz. llvm-svn: 324203
Diffstat (limited to 'libcxxabi')
-rw-r--r--libcxxabi/src/cxa_demangle.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/libcxxabi/src/cxa_demangle.cpp b/libcxxabi/src/cxa_demangle.cpp
index 0bfbffa092e..c97df8aa02c 100644
--- a/libcxxabi/src/cxa_demangle.cpp
+++ b/libcxxabi/src/cxa_demangle.cpp
@@ -2589,10 +2589,15 @@ Node *Db::parseExpr() {
if (First[1] == 'u') {
First += 2;
Node *Cond = parseExpr();
+ if (Cond == nullptr)
+ return nullptr;
Node *LHS = parseExpr();
+ if (LHS == nullptr)
+ return nullptr;
Node *RHS = parseExpr();
- if (Cond && LHS && RHS)
- return make<ConditionalExpr>(Cond, LHS, RHS);
+ if (RHS == nullptr)
+ return nullptr;
+ return make<ConditionalExpr>(Cond, LHS, RHS);
}
return nullptr;
case 'r':
OpenPOWER on IntegriCloud