From fb2a26cc2e40e007f19532b4e139d5f0a636d5c9 Mon Sep 17 00:00:00 2001 From: Xing Xue Date: Wed, 26 Jun 2019 19:27:16 +0000 Subject: [PATCH] Print NULL as "(null)" in diagnostic message Summary: Passing a null pointer to the printf family for a %s format specifier leads to undefined behaviour. The tests currently expect (null). Explicitly test for a null pointer and provide the expected string. Authored By: andusy Reviewers: hubert.reinterpretcast, xingxue, jasonliu, daltenty, cebowleratibm Reviewed By: hubert.reinterpretcast Subscribers: arphaman, jsji, cfe-commits Tags: #llvm Differential Revision: https://reviews.llvm.org/D63786 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@364462 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/c-index-test/c-index-test.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/c-index-test/c-index-test.c b/tools/c-index-test/c-index-test.c index 4032631c6b..33751714b8 100644 --- a/tools/c-index-test/c-index-test.c +++ b/tools/c-index-test/c-index-test.c @@ -1053,7 +1053,8 @@ static void PrintCursor(CXCursor Cursor, const char *CommentSchemaFile) { if (Cursor.kind == CXCursor_InclusionDirective) { CXFile File = clang_getIncludedFile(Cursor); CXString Included = clang_getFileName(File); - printf(" (%s)", clang_getCString(Included)); + const char *IncludedString = clang_getCString(Included); + printf(" (%s)", IncludedString ? IncludedString : "(null)"); clang_disposeString(Included); if (clang_isFileMultipleIncludeGuarded(TU, File)) @@ -4644,18 +4645,19 @@ static void printDiagnosticSet(CXDiagnosticSet Diags, unsigned indent) { CXFile File; CXString FileName, DiagSpelling, DiagOption, DiagCat; unsigned line, column, offset; - const char *DiagOptionStr = 0, *DiagCatStr = 0; + const char *FileNameStr = 0, *DiagOptionStr = 0, *DiagCatStr = 0; D = clang_getDiagnosticInSet(Diags, i); DiagLoc = clang_getDiagnosticLocation(D); clang_getExpansionLocation(DiagLoc, &File, &line, &column, &offset); FileName = clang_getFileName(File); + FileNameStr = clang_getCString(FileName); DiagSpelling = clang_getDiagnosticSpelling(D); - + printIndent(indent); fprintf(stderr, "%s:%d:%d: %s: %s", - clang_getCString(FileName), + FileNameStr ? FileNameStr : "(null)", line, column, getSeverityString(clang_getDiagnosticSeverity(D)), -- 2.50.1