diff --git a/psftp.c b/psftp.c index c30e6fbd..efb5bbff 100644 --- a/psftp.c +++ b/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) {