Fix minor memory leak in psftp batch mode.

Spotted by Leak Sanitiser, while I was investigating the PSFTP /
proftpd issue mentioned in the previous commit (with ASan on as
usual).

The two very similar loops that read PSFTP commands from the
interactive prompt and a batch file differed in one respect: only one
of them remembered to free the command afterwards. Now I've moved the
freeing code out into a subroutine that both loops can use.
This commit is contained in:
Simon Tatham 2020-02-05 19:45:27 +00:00
Родитель cd97b7e7ea
Коммит bf0f323fb4
1 изменённых файлов: 12 добавлений и 7 удалений

19
psftp.c
Просмотреть файл

@ -2307,6 +2307,16 @@ struct sftp_command *sftp_getcmd(FILE *fp, int mode, int modeflags)
return cmd;
}
static void sftp_cmd_free(struct sftp_command *cmd)
{
if (cmd->words) {
for (size_t i = 0; i < cmd->nwords; i++)
sfree(cmd->words[i]);
sfree(cmd->words);
}
sfree(cmd);
}
static int do_sftp_init(void)
{
struct sftp_packet *pktin;
@ -2381,13 +2391,7 @@ int do_sftp(int mode, int modeflags, char *batchfile)
if (!cmd)
break;
ret = cmd->obey(cmd);
if (cmd->words) {
int i;
for(i = 0; i < cmd->nwords; i++)
sfree(cmd->words[i]);
sfree(cmd->words);
}
sfree(cmd);
sftp_cmd_free(cmd);
if (ret < 0)
break;
}
@ -2404,6 +2408,7 @@ int do_sftp(int mode, int modeflags, char *batchfile)
if (!cmd)
break;
ret = cmd->obey(cmd);
sftp_cmd_free(cmd);
if (ret < 0)
break;
if (ret == 0) {