diff --git a/src/sftp/sftp_pkt.c b/src/sftp/sftp_pkt.c index c567740efcd2625bd10ee4ea3d49066cce757c60..131716f591bd600fa8c9b1da81544634c68e6bca 100644 --- a/src/sftp/sftp_pkt.c +++ b/src/sftp/sftp_pkt.c @@ -314,10 +314,20 @@ sftp_append64(sftp_tx_pkt_t *pktp, uint64_t u64) bool sftp_appendstring(sftp_tx_pkt_t *pktp, sftp_str_t s) { + uint32_t oldused; + assert(pktp); - sftp_append32(pktp, s->len); - if (!grow_tx(pktp, s->len)) + if (*pktp == NULL) + oldused = 0; + else + oldused = (*pktp)->used; + if (!sftp_append32(pktp, s->len)) + return false; + if (!grow_tx(pktp, s->len)) { + if (*pktp != NULL) + (*pktp)->used = oldused; return false; + } sftp_tx_pkt_t pkt = *pktp; memcpy(&(&pkt->type)[pkt->used], (uint8_t *)s->c_str, s->len); pkt->used += s->len;