From 8d93576b94c2152d1103cedd247db450b72a7b37 Mon Sep 17 00:00:00 2001 From: Klemens Morgenstern Date: Wed, 15 Feb 2023 02:04:24 +0800 Subject: [PATCH] close #296. --- .../boost/process/detail/posix/basic_cmd.hpp | 6 ++++-- test/cmd_test.cpp | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/include/boost/process/detail/posix/basic_cmd.hpp b/include/boost/process/detail/posix/basic_cmd.hpp index d13d4c1bc..c1f899762 100644 --- a/include/boost/process/detail/posix/basic_cmd.hpp +++ b/include/boost/process/detail/posix/basic_cmd.hpp @@ -155,13 +155,15 @@ struct exe_cmd_init : boost::process::detail::api::handler_base_ext std::vector exe_cmd_init::make_cmd() { + // any string must be writable. + static char empty_string[1] = ""; std::vector vec; if (!exe.empty()) - vec.push_back(&exe.front()); + vec.push_back(exe.empty() ? empty_string : &exe.front()); if (!args.empty()) { for (auto & v : args) - vec.push_back(&v.front()); + vec.push_back(v.empty() ? empty_string : &v.front()); } vec.push_back(nullptr); diff --git a/test/cmd_test.cpp b/test/cmd_test.cpp index 47ca034b9..6586bd301 100644 --- a/test/cmd_test.cpp +++ b/test/cmd_test.cpp @@ -83,3 +83,24 @@ BOOST_AUTO_TEST_CASE(implicit) BOOST_TEST_MESSAGE(ec.message()); BOOST_CHECK_EQUAL(ret, 21); } + +BOOST_AUTO_TEST_CASE(empty_cmd) +{ + using boost::unit_test::framework::master_test_suite; + + std::error_code ec; + + fs::path pth = master_test_suite().argv[1]; + auto env = boost::this_process::environment(); + + auto itr = std::find_if(env.begin(), env.end(), + [](const bp::native_environment::entry_type & e){return boost::to_upper_copy(e.get_name()) == "PATH";}); + + BOOST_REQUIRE(itr != env.end()); + + (*itr) += fs::canonical(fs::absolute(pth.parent_path())).string(); + BOOST_REQUIRE(itr != env.end()); + + bp::system("sparring_partner \"\" ", ec); +} +