]> granicus.if.org Git - clang/commitdiff
Don't leak invalid RegexDirectives. Probably a small part of PR19520.
authorNico Weber <nicolasweber@gmx.de>
Thu, 24 Apr 2014 05:32:03 +0000 (05:32 +0000)
committerNico Weber <nicolasweber@gmx.de>
Thu, 24 Apr 2014 05:32:03 +0000 (05:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207077 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/VerifyDiagnosticConsumer.cpp

index 0221a5550c039b387620c96ecca75d8edbb36269..407c1d32972a8094dfd9c0faa4a7ca7b331c39ca 100644 (file)
@@ -491,11 +491,12 @@ static bool ParseDirective(StringRef S, ExpectedData *ED, SourceManager &SM,
     }
 
     // Construct new directive.
-    Directive *D = Directive::create(RegexKind, Pos, ExpectedLoc, Text,
-                                     Min, Max);
+    std::unique_ptr<Directive> D(
+        Directive::create(RegexKind, Pos, ExpectedLoc, Text, Min, Max));
+
     std::string Error;
     if (D->isValid(Error)) {
-      DL->push_back(D);
+      DL->push_back(D.release());
       FoundDirective = true;
     } else {
       Diags.Report(Pos.getLocWithOffset(ContentBegin-PH.Begin),
@@ -880,5 +881,6 @@ Directive *Directive::create(bool RegexKind, SourceLocation DirectiveLoc,
     }
   }
 
-  return new RegexDirective(DirectiveLoc, DiagnosticLoc, Text, Min, Max, RegexStr);
+  return new RegexDirective(DirectiveLoc, DiagnosticLoc, Text, Min, Max,
+                            RegexStr);
 }