mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-20 08:53:55 +08:00
Fix undefined behaviors discovered in tests
This change removes the following UBs: - calling std::vector::insert() with source range, which comes from the destination vector; when vector needs to grow then the source iterators are invalid - comparison of singular (default-constructed) iterators is disallowed Signed-off-by: Wrobel, Patryk <patryk.wrobel@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
57da7ad307
commit
a8db8b852a
@@ -1018,8 +1018,11 @@ TEST(ProgramDecoder, GivenValidProgramWithConstantSurfacesThenDecodingSucceedsAn
|
||||
decodedProgram = {};
|
||||
auto inlineSize = programToEncode.programScopeTokens.allocateConstantMemorySurface[0]->InlineDataSize;
|
||||
auto secondConstantSurfaceOff = programToEncode.storage.size();
|
||||
programToEncode.storage.insert(programToEncode.storage.end(), reinterpret_cast<uint8_t *>(programToEncode.constSurfMutable),
|
||||
reinterpret_cast<uint8_t *>(programToEncode.constSurfMutable + 1));
|
||||
|
||||
std::vector<uint8_t> copiedConstSurfMutable(reinterpret_cast<uint8_t *>(programToEncode.constSurfMutable),
|
||||
reinterpret_cast<uint8_t *>(programToEncode.constSurfMutable + 1));
|
||||
programToEncode.storage.insert(programToEncode.storage.end(), copiedConstSurfMutable.begin(), copiedConstSurfMutable.end());
|
||||
|
||||
programToEncode.storage.resize(programToEncode.storage.size() + inlineSize);
|
||||
programToEncode.recalcTokPtr();
|
||||
decodeSuccess = NEO::PatchTokenBinary::decodeProgramFromPatchtokensBlob(programToEncode.blobs.programInfo, decodedProgram);
|
||||
@@ -1064,8 +1067,11 @@ TEST(ProgramDecoder, GivenValidProgramWithGlobalSurfacesThenDecodingSucceedsAndT
|
||||
decodedProgram = {};
|
||||
auto inlineSize = programToEncode.programScopeTokens.allocateGlobalMemorySurface[0]->InlineDataSize;
|
||||
auto secondGlobalSurfaceOff = programToEncode.storage.size();
|
||||
programToEncode.storage.insert(programToEncode.storage.end(), reinterpret_cast<uint8_t *>(programToEncode.globalSurfMutable),
|
||||
reinterpret_cast<uint8_t *>(programToEncode.globalSurfMutable + 1));
|
||||
|
||||
std::vector<uint8_t> copiedGlobalSurfMutable(reinterpret_cast<uint8_t *>(programToEncode.globalSurfMutable),
|
||||
reinterpret_cast<uint8_t *>(programToEncode.globalSurfMutable + 1));
|
||||
programToEncode.storage.insert(programToEncode.storage.end(), copiedGlobalSurfMutable.begin(), copiedGlobalSurfMutable.end());
|
||||
|
||||
programToEncode.storage.resize(programToEncode.storage.size() + inlineSize);
|
||||
programToEncode.recalcTokPtr();
|
||||
decodeSuccess = NEO::PatchTokenBinary::decodeProgramFromPatchtokensBlob(programToEncode.blobs.programInfo, decodedProgram);
|
||||
@@ -1155,7 +1161,10 @@ TEST(ProgramDecoder, GivenValidProgramWithKernelThenDecodingSucceedsAndTokensAre
|
||||
TEST(ProgramDecoder, GivenValidProgramWithTwoKernelsWhenThenDecodingSucceeds) {
|
||||
PatchTokensTestData::ValidProgramWithKernelUsingSlm programToEncode;
|
||||
programToEncode.headerMutable->NumberOfKernels = 2;
|
||||
programToEncode.storage.insert(programToEncode.storage.end(), programToEncode.kernels[0].blobs.kernelInfo.begin(), programToEncode.kernels[0].blobs.kernelInfo.end());
|
||||
|
||||
std::vector<uint8_t> copiedKernelInfo(programToEncode.kernels[0].blobs.kernelInfo.begin(), programToEncode.kernels[0].blobs.kernelInfo.end());
|
||||
programToEncode.storage.insert(programToEncode.storage.end(), copiedKernelInfo.begin(), copiedKernelInfo.end());
|
||||
|
||||
NEO::PatchTokenBinary::ProgramFromPatchtokens decodedProgram;
|
||||
bool decodeSuccess = NEO::PatchTokenBinary::decodeProgramFromPatchtokensBlob(programToEncode.storage, decodedProgram);
|
||||
EXPECT_TRUE(decodeSuccess);
|
||||
@@ -1188,7 +1197,10 @@ TEST(ProgramDecoder, GivenProgramWithMultipleKernelsWhenFailsToDecodeKernelThenD
|
||||
PatchTokensTestData::ValidProgramWithKernelUsingSlm programToEncode;
|
||||
programToEncode.slmMutable->Size = 0U;
|
||||
programToEncode.headerMutable->NumberOfKernels = 2;
|
||||
programToEncode.storage.insert(programToEncode.storage.end(), programToEncode.kernels[0].blobs.kernelInfo.begin(), programToEncode.kernels[0].blobs.kernelInfo.end());
|
||||
|
||||
std::vector<uint8_t> copiedKernelInfo(programToEncode.kernels[0].blobs.kernelInfo.begin(), programToEncode.kernels[0].blobs.kernelInfo.end());
|
||||
programToEncode.storage.insert(programToEncode.storage.end(), copiedKernelInfo.begin(), copiedKernelInfo.end());
|
||||
|
||||
NEO::PatchTokenBinary::ProgramFromPatchtokens decodedProgram;
|
||||
bool decodeSuccess = NEO::PatchTokenBinary::decodeProgramFromPatchtokensBlob(programToEncode.storage, decodedProgram);
|
||||
EXPECT_FALSE(decodeSuccess);
|
||||
@@ -1220,4 +1232,4 @@ TEST(ProgramDecoder, givenPatchTokenInterfaceDescriptorDataWhenFlagPrintDebugMes
|
||||
EXPECT_TRUE(decodeSuccess);
|
||||
EXPECT_EQ(NEO::DecodeError::Success, decodedKernel.decodeStatus);
|
||||
EXPECT_EQ("Ignored kernel-scope Patch Token: 21\n", output);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,8 +17,11 @@ HWTEST_F(HwParseTest, WhenEmptyBufferThenDontExpectCommands) {
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
bool cmdBuffOk = false;
|
||||
|
||||
GenCmdList::iterator beg, end;
|
||||
end = beg;
|
||||
GenCmdList cmdList;
|
||||
|
||||
auto beg = cmdList.begin();
|
||||
auto end = cmdList.end();
|
||||
|
||||
cmdBuffOk = expectCmdBuff<FamilyType>(beg, end,
|
||||
std::vector<MatchCmd *>{});
|
||||
EXPECT_TRUE(cmdBuffOk);
|
||||
|
||||
@@ -302,7 +302,10 @@ TEST(PopulateProgramInfoFromPatchtokensTests, GivenProgramWithKernelsWhenKernelH
|
||||
TEST(PopulateProgramInfoFromPatchtokensTests, givenProgramWithKernelWhenKernelHasHostAccessTableThenPopulateDeviceHostNameMapCorrectly) {
|
||||
PatchTokensTestData::ValidProgramWithKernelUsingHostAccessTable programToEncode;
|
||||
programToEncode.headerMutable->NumberOfKernels = 1;
|
||||
programToEncode.storage.insert(programToEncode.storage.end(), programToEncode.kernels[0].blobs.kernelInfo.begin(), programToEncode.kernels[0].blobs.kernelInfo.end());
|
||||
|
||||
std::vector<uint8_t> copiedKernelInfo(programToEncode.kernels[0].blobs.kernelInfo.begin(), programToEncode.kernels[0].blobs.kernelInfo.end());
|
||||
programToEncode.storage.insert(programToEncode.storage.end(), copiedKernelInfo.begin(), copiedKernelInfo.end());
|
||||
|
||||
NEO::PatchTokenBinary::ProgramFromPatchtokens decodedProgram;
|
||||
bool decodeSuccess = NEO::PatchTokenBinary::decodeProgramFromPatchtokensBlob(programToEncode.storage, decodedProgram);
|
||||
EXPECT_TRUE(decodeSuccess);
|
||||
@@ -312,4 +315,4 @@ TEST(PopulateProgramInfoFromPatchtokensTests, givenProgramWithKernelWhenKernelHa
|
||||
EXPECT_EQ(2u, programInfo.globalsDeviceToHostNameMap.size());
|
||||
EXPECT_STREQ("hostNameOne", programInfo.globalsDeviceToHostNameMap["deviceNameOne"].c_str());
|
||||
EXPECT_STREQ("hostNameTwo", programInfo.globalsDeviceToHostNameMap["deviceNameTwo"].c_str());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user