diff --git a/base/src/directory_ex.cpp b/base/src/directory_ex.cpp index 4ddd6465032aa820ce07f2f6fb4c0e8ec66e4a3e..bac6356d160f932f8333e50d52f09df9d903eb7f 100644 --- a/base/src/directory_ex.cpp +++ b/base/src/directory_ex.cpp @@ -140,6 +140,9 @@ string ExcludeTrailingPathDelimiter(const std::string& path) string IncludeTrailingPathDelimiter(const std::string& path) { + if (path.empty()) { + return "/"; + } if (path.rfind("/") != path.size() - 1) { return path + "/"; } @@ -164,7 +167,10 @@ void GetDirFiles(const string& path, vector& files) if (ptr == nullptr) { closedir(topNode); traverseStack.pop(); - currentPath.erase(currentPath.find_last_of("/")); + auto pos = currentPath.find_last_of("/"); + if (pos != string::npos) { + currentPath.erase(pos); + } continue; } diff --git a/base/test/unittest/common/utils_directory_test.cpp b/base/test/unittest/common/utils_directory_test.cpp index 265571b14de937edd9ad7b2b505274c2648a9a74..c806735488f77b74a4a427f8d02c7dcdf89068ef 100644 --- a/base/test/unittest/common/utils_directory_test.cpp +++ b/base/test/unittest/common/utils_directory_test.cpp @@ -139,6 +139,17 @@ HWTEST_F(UtilsDirectoryTest, testIncludeTrailingPathDelimiter001, TestSize.Level EXPECT_EQ(strResult, strName); } +/* + * @tc.name: testIncludeTrailingPathDelimiter002 + * @tc.desc: directory unit test + */ +HWTEST_F(UtilsDirectoryTest, testIncludeTrailingPathDelimiter002, TestSize.Level0) +{ + string strResult = "/"; + string strName = IncludeTrailingPathDelimiter(""); + EXPECT_EQ(strResult, strName); +} + /* * @tc.name: testGetDirFiles001 * @tc.desc: test GetDirFiles works on multi-level directory