diff --git a/oss-internship-2020/libarchive/examples/sapi_minitar.cc b/oss-internship-2020/libarchive/examples/sapi_minitar.cc index 494d380..d2388f1 100644 --- a/oss-internship-2020/libarchive/examples/sapi_minitar.cc +++ b/oss-internship-2020/libarchive/examples/sapi_minitar.cc @@ -19,7 +19,7 @@ #include "sandboxed_api/util/status_macros.h" absl::Status CreateArchive(const char* initial_filename, int compress, - const char** argv, bool verbose) { + const std::vector& argv, bool verbose) { // We split the filename path into dirname and filename. To the filename we // prepend "/output/"" so that it will work with the security policy. std::string abs_path = MakeAbsolutePathAtCWD(std::string(initial_filename)); @@ -28,9 +28,7 @@ absl::Status CreateArchive(const char* initial_filename, int compress, std::string filename = sandbox2::file::JoinPath("/output/", filename_tmp); - std::vector absolute_paths; - sandbox2::util::CharPtrArrToVecString(const_cast(argv), - &absolute_paths); + std::vector absolute_paths = argv; std::vector relative_paths = absolute_paths; diff --git a/oss-internship-2020/libarchive/examples/sapi_minitar_main.cc b/oss-internship-2020/libarchive/examples/sapi_minitar_main.cc index 244a45c..6201a28 100644 --- a/oss-internship-2020/libarchive/examples/sapi_minitar_main.cc +++ b/oss-internship-2020/libarchive/examples/sapi_minitar_main.cc @@ -101,7 +101,9 @@ int main(int unused_argc, char* argv[]) { absl::Status status; switch (mode) { case 'c': - status = CreateArchive(filename, compress, argv, verbose); + status = CreateArchive(filename, compress, + sandbox2::util::CharArrPtr(argv).ToStringVector(), + verbose); if (!status.ok()) { LOG(ERROR) << "Archive creation failed with message: " << status.message(); diff --git a/oss-internship-2020/libarchive/test/minitar_test.cc b/oss-internship-2020/libarchive/test/minitar_test.cc index 9bcf9b2..ffac9bf 100644 --- a/oss-internship-2020/libarchive/test/minitar_test.cc +++ b/oss-internship-2020/libarchive/test/minitar_test.cc @@ -23,7 +23,6 @@ namespace { -using ::sandbox2::util::VecStringToCharPtrArr; using ::sapi::IsOk; using ::sapi::file::JoinPath; using ::sapi::file_util::fileops::Exists; @@ -164,8 +163,7 @@ std::string* MiniTarTest::init_wd_; TEST_F(MiniTarTest, TestFileSimple) { std::vector v = {kFile1.data()}; - ASSERT_THAT(CreateArchive(id_.data(), 0, VecStringToCharPtrArr(v), false), - IsOk()); + ASSERT_THAT(CreateArchive(id_.data(), 0, v, false), IsOk()); ASSERT_THAT(chdir(tmp_dir_.data()), Eq(0)) << "Could not chdir into test data directory"; @@ -178,8 +176,7 @@ TEST_F(MiniTarTest, TestFileSimple) { TEST_F(MiniTarTest, TestMultipleFiles) { std::vector v = {kFile1.data(), kFile2.data(), kFile3.data()}; - ASSERT_THAT(CreateArchive(id_.data(), 0, VecStringToCharPtrArr(v), false), - IsOk()); + ASSERT_THAT(CreateArchive(id_.data(), 0, v, false), IsOk()); ASSERT_THAT(Exists(id_.data(), false), IsTrue()) << "Archive file was not created"; @@ -196,8 +193,7 @@ TEST_F(MiniTarTest, TestMultipleFiles) { TEST_F(MiniTarTest, TestDirectorySimple) { std::vector v = {kDir2.data()}; - ASSERT_THAT(CreateArchive(id_.data(), 0, VecStringToCharPtrArr(v), false), - IsOk()); + ASSERT_THAT(CreateArchive(id_.data(), 0, v, false), IsOk()); ASSERT_THAT(chdir(tmp_dir_.data()), Eq(0)) << "Could not chdir into test data directory"; @@ -210,8 +206,7 @@ TEST_F(MiniTarTest, TestDirectorySimple) { TEST_F(MiniTarTest, TestDirectoryNested) { std::vector v = {kDir1.data()}; - ASSERT_THAT(CreateArchive(id_.data(), 0, VecStringToCharPtrArr(v), false), - IsOk()); + ASSERT_THAT(CreateArchive(id_.data(), 0, v, false), IsOk()); ASSERT_THAT(chdir(tmp_dir_.data()), Eq(0)) << "Could not chdir into test data directory"; @@ -225,8 +220,7 @@ TEST_F(MiniTarTest, TestDirectoryNested) { TEST_F(MiniTarTest, TestComplex) { std::vector v = {kFile1.data(), kDir1.data()}; - ASSERT_THAT(CreateArchive(id_.data(), 0, VecStringToCharPtrArr(v), false), - IsOk()); + ASSERT_THAT(CreateArchive(id_.data(), 0, v, false), IsOk()); ASSERT_THAT(chdir(tmp_dir_.data()), Eq(0)) << "Could not chdir into test data directory"; @@ -242,9 +236,7 @@ TEST_F(MiniTarTest, TestComplex) { TEST_F(MiniTarTest, TestCompress) { std::vector v = {kFile1.data(), kDir1.data()}; int compress = 'Z'; - ASSERT_THAT( - CreateArchive(id_.data(), compress, VecStringToCharPtrArr(v), false), - IsOk()); + ASSERT_THAT(CreateArchive(id_.data(), compress, v, false), IsOk()); ASSERT_THAT(chdir(tmp_dir_.data()), Eq(0)) << "Could not chdir into test data directory"; @@ -259,9 +251,7 @@ TEST_F(MiniTarTest, TestCompress) { TEST_F(MiniTarTest, TestGZIP) { std::vector v = {kFile1.data(), kDir1.data()}; int compress = 'z'; - ASSERT_THAT( - CreateArchive(id_.data(), compress, VecStringToCharPtrArr(v), false), - IsOk()); + ASSERT_THAT(CreateArchive(id_.data(), compress, v, false), IsOk()); ASSERT_THAT(chdir(tmp_dir_.data()), Eq(0)) << "Could not chdir into test data directory"; @@ -276,9 +266,7 @@ TEST_F(MiniTarTest, TestGZIP) { TEST_F(MiniTarTest, TestBZIP2) { std::vector v = {kFile1.data(), kDir1.data()}; int compress = 'j'; - ASSERT_THAT( - CreateArchive(id_.data(), compress, VecStringToCharPtrArr(v), false), - IsOk()); + ASSERT_THAT(CreateArchive(id_.data(), compress, v, false), IsOk()); ASSERT_THAT(chdir(tmp_dir_.data()), Eq(0)) << "Could not chdir into test data directory"; @@ -294,8 +282,7 @@ TEST_F(MiniTarTest, TestPaths) { // These should be equivalent to kFile1 and kDir1 after cleaning. std::vector v = {JoinPath("a/b/../../c/../", kFile1).data(), JoinPath("d/../e/././///../", kDir1).data()}; - ASSERT_THAT(CreateArchive(id_.data(), 0, VecStringToCharPtrArr(v), false), - IsOk()); + ASSERT_THAT(CreateArchive(id_.data(), 0, v, false), IsOk()); ASSERT_THAT(chdir(tmp_dir_.data()), Eq(0)) << "Could not chdir into test data directory"; diff --git a/sandboxed_api/sandbox2/util.cc b/sandboxed_api/sandbox2/util.cc index d02d744..2ed22d6 100644 --- a/sandboxed_api/sandbox2/util.cc +++ b/sandboxed_api/sandbox2/util.cc @@ -96,20 +96,6 @@ void DumpCoverageData() { #endif } -void CharPtrArrToVecString(char* const* arr, std::vector* vec) { - *vec = CharPtrArray(arr).ToStringVector(); -} - -const char** VecStringToCharPtrArr(const std::vector& vec) { - const int vec_size = vec.size(); - const char** arr = new const char*[vec_size + 1]; - for (int i = 0; i < vec_size; ++i) { - arr[i] = vec[i].c_str(); - } - arr[vec_size] = nullptr; - return arr; -} - CharPtrArray::CharPtrArray(char* const* arr) : content_(ConcatenateAll(arr)) { for (auto it = content_.begin(); it != content_.end(); it += strlen(&*it) + 1) { diff --git a/sandboxed_api/sandbox2/util.h b/sandboxed_api/sandbox2/util.h index ba1f92d..d171dc9 100644 --- a/sandboxed_api/sandbox2/util.h +++ b/sandboxed_api/sandbox2/util.h @@ -25,23 +25,13 @@ #include #include "absl/base/attributes.h" +#include "absl/base/macros.h" #include "absl/status/statusor.h" namespace sandbox2::util { void DumpCoverageData(); -// Converts an array of char* (terminated by a nullptr, like argv, or environ -// arrays), to an std::vector. -ABSL_DEPRECATED("Use CharPtrArray(arr).ToStringVector() instead") -void CharPtrArrToVecString(char* const* arr, std::vector* vec); - -// Converts a vector of strings to a newly allocated array. The array is limited -// by the terminating nullptr entry (like environ or argv). It must be freed by -// the caller. -ABSL_DEPRECATED("Use CharPtrArray class instead") -const char** VecStringToCharPtrArr(const std::vector& vec); - // An char ptr array limited by the terminating nullptr entry (like environ // or argv). class CharPtrArray { @@ -62,6 +52,14 @@ class CharPtrArray { std::vector array_; }; +// Converts an array of char* (terminated by a nullptr, like argv, or environ +// arrays), to an std::vector. +ABSL_DEPRECATED("Use CharPtrArray(arr).ToStringVector() instead") +inline void CharPtrArrToVecString(char* const* arr, + std::vector* vec) { + *vec = sandbox2::util::CharPtrArray(arr).ToStringVector(); +} + // Returns the program name (via /proc/self/comm) for a given PID. std::string GetProgName(pid_t pid);