[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