diff options
Diffstat (limited to 'src/proone.c')
-rw-r--r-- | src/proone.c | 14 |
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); |