diff --git a/hphp/runtime/ext/process/ext_process.cpp b/hphp/runtime/ext/process/ext_process.cpp index f4e29cbb909ac..59feb0e376f2d 100644 --- a/hphp/runtime/ext/process/ext_process.cpp +++ b/hphp/runtime/ext/process/ext_process.cpp @@ -61,24 +61,21 @@ namespace HPHP { /////////////////////////////////////////////////////////////////////////////// // build environment pair list -static char **build_envp(const Array& envs, std::vector &senvs) { - char **envp = NULL; - int size = envs.size(); - if (size) { - envp = (char **)malloc((size + 1) * sizeof(char *)); - int i = 0; - for (ArrayIter iter(envs); iter; ++iter, ++i) { - StringBuffer nvpair; - nvpair.append(iter.first().toString()); - nvpair.append('='); - nvpair.append(iter.second().toString()); - - String env = nvpair.detach(); - senvs.push_back(env); - *(envp + i) = (char *)env.data(); - } - *(envp + i) = NULL; +static char** build_envp(const Array& envs, req::vector &senvs) { + auto const size = envs.size(); + if (!size) return nullptr; + auto envp = req::make_raw_array(size + 1); + size_t i = 0; + for (ArrayIter iter(envs); iter; ++iter, ++i) { + StringBuffer nvpair; + nvpair.append(iter.first().toString()); + nvpair.append('='); + nvpair.append(iter.second().toString()); + String env = nvpair.detach(); + senvs.push_back(env); + envp[i] = (char*)env.data(); } + envp[i] = nullptr; return envp; } @@ -89,7 +86,7 @@ static bool check_cmd(const char *cmd) { bool allow = false; while (isblank(*cmd_tmp)) cmd_tmp++; const char *space = strchr(cmd_tmp, ' '); - unsigned int cmd_len = strlen(cmd_tmp); + auto cmd_len = strlen(cmd_tmp); if (space) { cmd_len = space - cmd_tmp; } @@ -213,25 +210,25 @@ void HHVM_FUNCTION(pcntl_exec, return; } - // build argumnent list - std::vector sargs; // holding those char * - int size = args.size(); - char **argv = (char **)malloc((size + 2) * sizeof(char *)); - *argv = (char *)path.data(); + // build argument list + req::vector sargs; // holding those char * + auto const size = args.size(); + auto argv = req::make_raw_array(size + 2); + argv[0] = (char*)path.data(); int i = 1; if (size) { sargs.reserve(size); for (ArrayIter iter(args); iter; ++iter, ++i) { String arg = iter.second().toString(); sargs.push_back(arg); - *(argv + i) = (char *)arg.data(); + argv[i] = (char*)arg.data(); } } - *(argv + i) = NULL; + argv[i] = nullptr; // build environment pair list - std::vector senvs; // holding those char * - char **envp = build_envp(envs, senvs); + req::vector senvs; // holding those char * + auto envp = build_envp(envs, senvs); if (execve(path.c_str(), argv, envp) == -1) { raise_warning("Error has occurred: (errno %d) %s", errno, folly::errnoStr(errno).c_str());