From: Matt Beaumont-Gay Date: Mon, 3 Oct 2011 16:26:56 +0000 (+0000) Subject: Don't crash when trying to emit too many fixits. Also, keep some constants in X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7035f310f5cfedb35ee4422bcab98e9f18f4ce63;p=clang Don't crash when trying to emit too many fixits. Also, keep some constants in sync between DiagnosticsEngine and PartialDiagnostic. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141006 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/Diagnostic.h b/include/clang/Basic/Diagnostic.h index 492c8b069e..fefc44ce7b 100644 --- a/include/clang/Basic/Diagnostic.h +++ b/include/clang/Basic/Diagnostic.h @@ -778,6 +778,8 @@ public: void AddFixItHint(const FixItHint &Hint) const { assert(NumFixItHints < DiagnosticsEngine::MaxFixItHints && "Too many fix-it hints!"); + if (NumFixItHints >= DiagnosticsEngine::MaxFixItHints) + return; // Don't crash in release builds if (DiagObj) DiagObj->FixItHints[NumFixItHints++] = Hint; } diff --git a/include/clang/Basic/PartialDiagnostic.h b/include/clang/Basic/PartialDiagnostic.h index 4eff3a188e..c6ca989765 100644 --- a/include/clang/Basic/PartialDiagnostic.h +++ b/include/clang/Basic/PartialDiagnostic.h @@ -33,7 +33,7 @@ public: /// currently only support up to 10 arguments (%0-%9). /// A single diagnostic with more than that almost certainly has to /// be simplified anyway. - MaxArguments = 10 + MaxArguments = DiagnosticsEngine::MaxArguments }; /// NumDiagArgs - This contains the number of entries in Arguments. @@ -65,7 +65,7 @@ public: /// only support 10 ranges, could easily be extended if needed. CharSourceRange DiagRanges[10]; - enum { MaxFixItHints = 3 }; + enum { MaxFixItHints = DiagnosticsEngine::MaxFixItHints }; /// FixItHints - If valid, provides a hint with some code /// to insert, remove, or modify at a particular position. @@ -165,6 +165,8 @@ private: assert(DiagStorage->NumFixItHints < Storage::MaxFixItHints && "Too many code modification hints!"); + if (DiagStorage->NumFixItHints >= Storage::MaxFixItHints) + return; // Don't crash in release builds DiagStorage->FixItHints[DiagStorage->NumFixItHints++] = Hint; }