[demangler] return early if conditional expr parsing failed
authorErik Pilkington <erik.pilkington@gmail.com>
Mon, 5 Feb 2018 02:34:41 +0000 (02:34 +0000)
committerErik Pilkington <erik.pilkington@gmail.com>
Mon, 5 Feb 2018 02:34:41 +0000 (02:34 +0000)
This should fix some bugs found by oss-fuzz.

llvm-svn: 324203

libcxxabi/src/cxa_demangle.cpp

index 0bfbffa..c97df8a 100644 (file)
@@ -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':