From 9ce0f4d0c39b1ebddc4d83fe28ea306b5766c37a Mon Sep 17 00:00:00 2001 From: Dominik Dabek Date: Thu, 7 Oct 2021 10:19:34 +0000 Subject: [PATCH] Do not append null char to build log Related-To: NEO-5989 Signed-off-by: Dominik Dabek --- .../offline_compiler_tests.cpp | 23 ++++++++++++++++++- .../source/offline_compiler.cpp | 5 ++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp index 0f6c2f0b9c..10ef99091f 100644 --- a/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp +++ b/opencl/test/unit_test/offline_compiler/offline_compiler_tests.cpp @@ -25,6 +25,7 @@ #include "mock/mock_offline_compiler.h" #include +#include #include extern Environment *gEnvironment; @@ -871,7 +872,7 @@ TEST(OfflineCompilerTest, WhenStoringBinaryThenStoredCorrectly) { delete[] pDstBinary; } -TEST(OfflineCompilerTest, WhenUpdatingBuildLogThenMessageIsAppended) { +TEST(OfflineCompilerTest, givenErrorStringsWithoutExtraNullCharactersWhenUpdatingBuildLogThenMessageIsCorrect) { auto mockOfflineCompiler = std::unique_ptr(new MockOfflineCompiler()); ASSERT_NE(nullptr, mockOfflineCompiler); @@ -884,6 +885,26 @@ TEST(OfflineCompilerTest, WhenUpdatingBuildLogThenMessageIsAppended) { EXPECT_EQ(0, (ErrorString + "\n" + FinalString).compare(mockOfflineCompiler->getBuildLog().c_str())); } +TEST(OfflineCompilerTest, givenErrorStringsWithExtraNullCharactersWhenUpdatingBuildLogThenMessageIsCorrect) { + auto mockOfflineCompiler = std::unique_ptr(new MockOfflineCompiler()); + ASSERT_NE(nullptr, mockOfflineCompiler); + + std::array errorMessageArray = {"Error: undefined variable\0"}; + std::string expectedBuildLogString = "Error: undefined variable"; + EXPECT_EQ(errorMessageArray.size(), std::string("Error: undefined variable").length() + 2); + + mockOfflineCompiler->updateBuildLog(errorMessageArray.data(), errorMessageArray.size()); + EXPECT_EQ(mockOfflineCompiler->getBuildLog(), expectedBuildLogString); + + std::array additionalErrorMessageArray = {"Build failure\0"}; + expectedBuildLogString = "Error: undefined variable\n" + "Build failure"; + EXPECT_EQ(additionalErrorMessageArray.size(), std::string("Build failure").length() + 2); + + mockOfflineCompiler->updateBuildLog(additionalErrorMessageArray.data(), additionalErrorMessageArray.size()); + EXPECT_EQ(mockOfflineCompiler->getBuildLog(), expectedBuildLogString); +} + TEST(OfflineCompilerTest, GivenSourceCodeWhenBuildingThenSuccessIsReturned) { auto mockOfflineCompiler = std::unique_ptr(new MockOfflineCompiler()); ASSERT_NE(nullptr, mockOfflineCompiler); diff --git a/shared/offline_compiler/source/offline_compiler.cpp b/shared/offline_compiler/source/offline_compiler.cpp index 7e77abf3c2..c317ca1ec1 100644 --- a/shared/offline_compiler/source/offline_compiler.cpp +++ b/shared/offline_compiler/source/offline_compiler.cpp @@ -306,9 +306,10 @@ void OfflineCompiler::updateBuildLog(const char *pErrorString, const size_t erro std::string errorString = (errorStringSize && pErrorString) ? std::string(pErrorString, pErrorString + errorStringSize) : ""; if (errorString[0] != '\0') { if (buildLog.empty()) { - buildLog.assign(errorString); + buildLog.assign(errorString.c_str()); } else { - buildLog.append("\n" + errorString); + buildLog.append("\n"); + buildLog.append(errorString.c_str()); } } }