fix: null-guard name in ftpTransferCallback (crash on transfer stop)

SimpleFTPServer passes null for the filename in FTP_TRANSFER_STOP
from closeTransfer(). Using %s with a null pointer crashes vsnprintf.
Guard all name uses with fallback to '?' if null or empty.
This commit is contained in:
Lago
2026-04-03 23:19:10 +02:00
parent d8aadc3735
commit b90d70bed5
+5 -4
View File
@@ -150,15 +150,16 @@ void ftpCallback(FtpOperation ftpOperation, uint32_t freeSpace, uint32_t totalSp
* Called during file transfer operations.
*/
void ftpTransferCallback(FtpTransferOperation ftpOperation, const char *name, uint32_t transferredSize) {
const char *n = (name && name[0]) ? name : "?";
switch (ftpOperation) {
case FTP_UPLOAD_START:
Serial.printf("[FTP] Upload start: %s\n", name);
Serial.printf("[FTP] Upload start: %s\n", n);
ftp_transfer = true;
ftp_ui_state = FTP_ST_TRANSFERRING;
ftp_ui_dirty = true;
break;
case FTP_DOWNLOAD_START:
Serial.printf("[FTP] Download start: %s\n", name);
Serial.printf("[FTP] Download start: %s\n", n);
ftp_transfer = true;
ftp_ui_state = FTP_ST_TRANSFERRING;
ftp_ui_dirty = true;
@@ -167,14 +168,14 @@ void ftpTransferCallback(FtpTransferOperation ftpOperation, const char *name, ui
case FTP_DOWNLOAD:
break; // Ongoing — silent to avoid serial flood
case FTP_TRANSFER_STOP:
Serial.printf("[FTP] Transfer done: %s (%u bytes)\n", name, transferredSize);
Serial.printf("[FTP] Transfer done: %s (%lu bytes)\n", n, (unsigned long)transferredSize);
ftp_transfer = false;
ftp_ui_state = ftp_client_on ? FTP_ST_CONNECTED : FTP_ST_IDLE;
ftp_ui_dirty = true;
ftp_sd_dirty = true;
break;
case FTP_TRANSFER_ERROR:
Serial.printf("[FTP] Transfer error: %s\n", name);
Serial.printf("[FTP] Transfer error: %s\n", n);
ftp_transfer = false;
ftp_ui_state = ftp_client_on ? FTP_ST_CONNECTED : FTP_ST_IDLE;
ftp_ui_dirty = true;