From 533ed0c7c89fa6068e9c7faf660c9cdbac85381c Mon Sep 17 00:00:00 2001 From: bruvzg <7645683+bruvzg@users.noreply.github.com> Date: Wed, 13 Jan 2021 11:38:02 +0200 Subject: [PATCH] Fix OS::execute() and OS::create_process() command line argument CharStrings freed before use. --- drivers/unix/os_unix.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/drivers/unix/os_unix.cpp b/drivers/unix/os_unix.cpp index 13bb8665038..81ba4369a63 100644 --- a/drivers/unix/os_unix.cpp +++ b/drivers/unix/os_unix.cpp @@ -299,10 +299,15 @@ Error OS_Unix::execute(const String &p_path, const List &p_arguments, St if (pid == 0) { // The child process - Vector args; - args.push_back((char *)p_path.utf8().get_data()); + Vector cs; + cs.push_back(p_path.utf8()); for (int i = 0; i < p_arguments.size(); i++) { - args.push_back((char *)p_arguments[i].utf8().get_data()); + cs.push_back(p_arguments[i].utf8()); + } + + Vector args; + for (int i = 0; i < cs.size(); i++) { + args.push_back((char *)cs[i].get_data()); } args.push_back(0); @@ -335,10 +340,15 @@ Error OS_Unix::create_process(const String &p_path, const List &p_argume // This ensures the process won't go zombie at the end. setsid(); - Vector args; - args.push_back((char *)p_path.utf8().get_data()); + Vector cs; + cs.push_back(p_path.utf8()); for (int i = 0; i < p_arguments.size(); i++) { - args.push_back((char *)p_arguments[i].utf8().get_data()); + cs.push_back(p_arguments[i].utf8()); + } + + Vector args; + for (int i = 0; i < cs.size(); i++) { + args.push_back((char *)cs[i].get_data()); } args.push_back(0);