diff options
author | Erik Pilkington <erik.pilkington@gmail.com> | 2018-02-05 02:34:41 +0000 |
---|---|---|
committer | Erik Pilkington <erik.pilkington@gmail.com> | 2018-02-05 02:34:41 +0000 |
commit | 0923542c61cdbaa255c4336575c4b21d0c6779e8 (patch) | |
tree | 288d80496265e55ba3a7af20b13e6e941721365a /libcxxabi | |
parent | 0398ccd0c98ed255eabb0086cb48b34698c286bc (diff) | |
download | bcm5719-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.cpp | 9 |
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': |