Fix memory leak found by clang checker-267
This commit is contained in:
@@ -237,7 +237,7 @@ check_passwd(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static char **
|
static char **
|
||||||
build_command_info(char *command)
|
build_command_info(const char *command)
|
||||||
{
|
{
|
||||||
static char **command_info;
|
static char **command_info;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
@@ -308,9 +308,12 @@ find_editor(int nfiles, char * const files[], char **argv_out[])
|
|||||||
(editor_path = find_in_path(editor, plugin_state.envp)) == NULL) {
|
(editor_path = find_in_path(editor, plugin_state.envp)) == NULL) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
if (editor_path != editor)
|
||||||
|
free(editor);
|
||||||
nargv = (char **) malloc((nargc + 1 + nfiles + 1) * sizeof(char *));
|
nargv = (char **) malloc((nargc + 1 + nfiles + 1) * sizeof(char *));
|
||||||
if (nargv == NULL) {
|
if (nargv == NULL) {
|
||||||
sudo_log(SUDO_CONV_ERROR_MSG, "unable to allocate memory\n");
|
sudo_log(SUDO_CONV_ERROR_MSG, "unable to allocate memory\n");
|
||||||
|
free(editor_path);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
for (ac = 0; cp != NULL && ac < nargc; ac++) {
|
for (ac = 0; cp != NULL && ac < nargc; ac++) {
|
||||||
@@ -357,6 +360,7 @@ policy_check(int argc, char * const argv[],
|
|||||||
|
|
||||||
if (use_sudoedit) {
|
if (use_sudoedit) {
|
||||||
/* Rebuild argv using editor */
|
/* Rebuild argv using editor */
|
||||||
|
free(command);
|
||||||
command = find_editor(argc - 1, argv + 1, argv_out);
|
command = find_editor(argc - 1, argv + 1, argv_out);
|
||||||
if (command == NULL) {
|
if (command == NULL) {
|
||||||
sudo_log(SUDO_CONV_ERROR_MSG, "unable to find valid editor\n");
|
sudo_log(SUDO_CONV_ERROR_MSG, "unable to find valid editor\n");
|
||||||
@@ -373,6 +377,7 @@ policy_check(int argc, char * const argv[],
|
|||||||
|
|
||||||
/* Setup command info. */
|
/* Setup command info. */
|
||||||
*command_info_out = build_command_info(command);
|
*command_info_out = build_command_info(command);
|
||||||
|
free(command);
|
||||||
if (*command_info_out == NULL) {
|
if (*command_info_out == NULL) {
|
||||||
sudo_log(SUDO_CONV_ERROR_MSG, "out of memory\n");
|
sudo_log(SUDO_CONV_ERROR_MSG, "out of memory\n");
|
||||||
return -1;
|
return -1;
|
||||||
|
Reference in New Issue
Block a user