From: Nico Weber Date: Thu, 24 Apr 2014 05:32:03 +0000 (+0000) Subject: Don't leak invalid RegexDirectives. Probably a small part of PR19520. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9a68097040d8c10753ad8731c6641ac51220858d;p=clang Don't leak invalid RegexDirectives. Probably a small part of PR19520. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@207077 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Frontend/VerifyDiagnosticConsumer.cpp b/lib/Frontend/VerifyDiagnosticConsumer.cpp index 0221a5550c..407c1d3297 100644 --- a/lib/Frontend/VerifyDiagnosticConsumer.cpp +++ b/lib/Frontend/VerifyDiagnosticConsumer.cpp @@ -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 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); }