зеркало из https://github.com/github/putty.git
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:
Родитель
cd97b7e7ea
Коммит
bf0f323fb4
19
psftp.c
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) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче