[PATCH] D51867: [Diagnostics] Add error handling to FormatDiagnostic()

Jan Korous via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 10 14:55:13 PDT 2018


jkorous added a comment.

I tried to come up with some input that breaks current implementation so I could add the test. Problem is that invalid memory read doesn't guarantee deterministic crash.  
E. g. with this input the current implementation is definitely reading way past the buffer:

  SmallVector<char, 1> IgnoreMe;
  const char* Foo = "foo%";
  const char* FooEnd = Foo + 4;
  Diag.FormatDiagnostic(Foo, FooEnd, IgnoreMe);

...and it actually found some string there yet it didn't crash until it hit some unrelated assert

  (lldb) p DiagStr
  (const char *) $0 = 0x0000000100adc53b " SplatSizeInBits == 0 && \"SplatSizeInBits must divide width!\""
  (lldb) p *DiagStr
  (const char) $1 = ' '
  (lldb) p DiagEnd
  (const char *) $2 = 0x0000000100ad4155 "0"

The only reliable fail is passing nullptr which currently leads to SIGABRT (nullptr dereferenced)

  SmallVector<char, 1> IgnoreMe;
  const char* Foo = "foo";
  Diag.FormatDiagnostic(Foo, nullptr, IgnoreMe);

I am reconsidering the necessity of such tests here. WDYT?


Repository:
  rC Clang

https://reviews.llvm.org/D51867





More information about the cfe-commits mailing list