main/rizin: free RzCore on early-exit paths in rz_main_rizin (#6437)
Co-authored-by: Anton Kochkov <anton.kochkov@gmail.com>
This commit is contained in:
parent
b784b167e0
commit
308d53c9f7
1 changed files with 52 additions and 28 deletions
|
|
@ -450,9 +450,13 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
#define LISTS_FREE() \
|
||||
{ \
|
||||
rz_list_free(cmds); \
|
||||
cmds = NULL; \
|
||||
rz_list_free(evals); \
|
||||
evals = NULL; \
|
||||
rz_list_free(files); \
|
||||
files = NULL; \
|
||||
rz_list_free(prefiles); \
|
||||
prefiles = NULL; \
|
||||
}
|
||||
|
||||
bool stderr2stdout = false;
|
||||
|
|
@ -499,6 +503,8 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
if (argc == 2 && !strcmp(argv[1], "-H")) {
|
||||
main_print_var(r, NULL);
|
||||
LISTS_FREE();
|
||||
rz_core_task_sync_end(&r->tasks);
|
||||
rz_core_free(r);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -565,7 +571,8 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
#else
|
||||
case 'd':
|
||||
RZ_LOG_ERROR("Sorry. No debugger backend available.\n");
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
#endif
|
||||
case 'D': {
|
||||
debug = 2;
|
||||
|
|
@ -578,8 +585,8 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
rz_cmd_state_output_print(&state);
|
||||
rz_cmd_state_output_fini(&state);
|
||||
rz_cons_flush();
|
||||
LISTS_FREE();
|
||||
return 0;
|
||||
ret = 0;
|
||||
goto beach;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -629,8 +636,8 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
break;
|
||||
case 'H':
|
||||
main_print_var(r, opt.arg);
|
||||
LISTS_FREE();
|
||||
return 0;
|
||||
ret = 0;
|
||||
goto beach;
|
||||
case 'i':
|
||||
if (RZ_STR_ISEMPTY(opt.arg)) {
|
||||
RZ_LOG_ERROR("Cannot open empty script path\n");
|
||||
|
|
@ -716,16 +723,19 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
LISTS_FREE();
|
||||
RZ_FREE(debugbackend);
|
||||
free(customRarunProfile);
|
||||
return 0;
|
||||
ret = 0;
|
||||
goto beach;
|
||||
} else {
|
||||
rz_main_version_verify(0);
|
||||
LISTS_FREE();
|
||||
RZ_FREE(debugbackend);
|
||||
free(customRarunProfile);
|
||||
return rz_main_version_print(r->sys_path, "rizin");
|
||||
ret = rz_main_version_print(r->sys_path, "rizin");
|
||||
goto beach;
|
||||
}
|
||||
case 'V':
|
||||
return rz_main_version_verify(1);
|
||||
ret = rz_main_version_verify(1);
|
||||
goto beach;
|
||||
case 'w':
|
||||
perms |= RZ_PERM_W;
|
||||
break;
|
||||
|
|
@ -741,14 +751,16 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
RZ_LOG_ERROR("stderr2stdout: Failed to dup2 stderr\n");
|
||||
LISTS_FREE();
|
||||
RZ_FREE(debugbackend);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
if (noStderr) {
|
||||
if (-1 == close(2)) {
|
||||
RZ_LOG_ERROR("Failed to close stderr\n");
|
||||
LISTS_FREE();
|
||||
RZ_FREE(debugbackend);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
const char nul[] = RZ_SYS_DEVNULL;
|
||||
int new_stderr = open(nul, O_RDWR);
|
||||
|
|
@ -756,20 +768,23 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
RZ_LOG_ERROR("Failed to open %s\n", nul);
|
||||
LISTS_FREE();
|
||||
RZ_FREE(debugbackend);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
if (2 != new_stderr) {
|
||||
if (-1 == dup2(new_stderr, 2)) {
|
||||
RZ_LOG_ERROR("Failed to dup2 stderr\n");
|
||||
LISTS_FREE();
|
||||
RZ_FREE(debugbackend);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
if (-1 == close(new_stderr)) {
|
||||
RZ_LOG_ERROR("Failed to close %s\n", nul);
|
||||
LISTS_FREE();
|
||||
RZ_FREE(debugbackend);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -819,16 +834,18 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
rz_cmd_state_output_fini(&state);
|
||||
rz_cons_flush();
|
||||
LISTS_FREE();
|
||||
free(pfile);
|
||||
RZ_FREE(pfile);
|
||||
RZ_FREE(debugbackend);
|
||||
return 0;
|
||||
ret = 0;
|
||||
goto beach;
|
||||
}
|
||||
|
||||
if (help > 0) {
|
||||
LISTS_FREE();
|
||||
free(pfile);
|
||||
RZ_FREE(pfile);
|
||||
RZ_FREE(debugbackend);
|
||||
return main_help(r, help > 1 ? 2 : 0);
|
||||
ret = main_help(r, help > 1 ? 2 : 0);
|
||||
goto beach;
|
||||
}
|
||||
if (customRarunProfile) {
|
||||
char *tfn = rz_file_temp(".rz-run");
|
||||
|
|
@ -845,7 +862,8 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
RZ_LOG_ERROR("Missing argument for -d\n");
|
||||
LISTS_FREE();
|
||||
RZ_FREE(debugbackend);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
const char *src = haveRarunProfile ? pfile : argv[opt.ind];
|
||||
if (src && *src) {
|
||||
|
|
@ -892,7 +910,8 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
RZ_LOG_ERROR("Missing URI for -C\n");
|
||||
LISTS_FREE();
|
||||
RZ_FREE(debugbackend);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
if (strstr(uri, "://")) {
|
||||
rz_core_rtr_add(r, uri);
|
||||
|
|
@ -926,16 +945,18 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
if (debug) {
|
||||
RZ_LOG_ERROR("Error: Cannot debug directories, yet.\n");
|
||||
LISTS_FREE();
|
||||
free(pfile);
|
||||
RZ_FREE(pfile);
|
||||
RZ_FREE(debugbackend);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
if (rz_sys_chdir(argv[opt.ind])) {
|
||||
RZ_LOG_ERROR("[d] Cannot open directory\n");
|
||||
LISTS_FREE();
|
||||
free(pfile);
|
||||
RZ_FREE(pfile);
|
||||
RZ_FREE(debugbackend);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
} else if (argv[opt.ind] && !strcmp(argv[opt.ind], "-")) {
|
||||
int sz;
|
||||
|
|
@ -943,7 +964,8 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
int result = _setmode(_fileno(stdin), _O_BINARY);
|
||||
if (result == -1) {
|
||||
RZ_LOG_ERROR("Cannot set stdin to binary mode\n");
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
#endif
|
||||
/* stdin/batch mode */
|
||||
|
|
@ -971,7 +993,8 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
RZ_LOG_ERROR("[=] Cannot open '%s'\n", path);
|
||||
LISTS_FREE();
|
||||
free(path);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
rz_io_map_new(r->io, fh->fd, 7, 0LL, mapaddr,
|
||||
rz_io_fd_size(r->io, fh->fd));
|
||||
|
|
@ -995,8 +1018,8 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
} else {
|
||||
RZ_LOG_ERROR("Cannot slurp from stdin\n");
|
||||
free(buf);
|
||||
LISTS_FREE();
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
} else if (has_file_arg(argc, argv, &opt)) {
|
||||
if (debug) {
|
||||
|
|
@ -1010,7 +1033,8 @@ RZ_API int rz_main_rizin(int argc, const char **argv) {
|
|||
RZ_LOG_ERROR("No program given to -d\n");
|
||||
LISTS_FREE();
|
||||
RZ_FREE(debugbackend);
|
||||
return 1;
|
||||
ret = 1;
|
||||
goto beach;
|
||||
}
|
||||
if (debug == 2) {
|
||||
// autodetect backend with -D
|
||||
|
|
|
|||
Loading…
Reference in a new issue