jcs
/subtext
/amendments
/653
zmodem: Header injection is not needed here
jcs made amendment 653 1 day ago
--- zmodem.c Thu Dec 11 21:35:54 2025
+++ zmodem.c Tue Sep 22 16:22:02 2026
@@ -767,29 +767,15 @@ ZSendDataDat(struct zmodem_session *zs)
bool
ZInit(struct zmodem_session *zs)
{
- char c[4];
-
zs->CtlEsc = false;
zs->MaxDataLen = ZMODEM_BLOCK_SIZE;
zs->WinSize = 32767;
- if (zs->ZMode == IdZAutoR || zs->ZMode == IdZAutoS) {
- if (zs->ZMode == IdZAutoR) {
- zs->ZMode = IdZReceive;
- c[0] = '0';
- session_output(zs->session, c, 1);
- } else {
- zs->ZMode = IdZSend;
- c[0] = '1';
- session_output(zs->session, c, 1);
- }
- c[0] = '0';
- c[1] = 'B';
- c[2] = ZDLE;
- c[3] = ZPAD;
- session_output(zs->session, c, 4);
- }
-
+ if (zs->ZMode == IdZAutoR)
+ zs->ZMode = IdZReceive;
+ else if (zs->ZMode == IdZAutoS)
+ zs->ZMode = IdZSend;
+
zs->PktOutCount = 0;
zs->Pos = 0;
zs->LastPos = 0;
@@ -1067,6 +1053,15 @@ ZParseHdr(struct zmodem_session *zs)
case Z_SendDataDat:
case Z_SendDataDat2:
case Z_SendEOF:
+ if (!zs->file) {
+#ifdef ZMODEM_DEBUG
+ logger_printf("[%s] ZParseHdr: ZRPOS with no file, FINing",
+ state_name(zs));
+#endif
+ zs->ZState = Z_SendFIN;
+ ZSendFIN(zs);
+ break;
+ }
zs->Pos = ZRclHdr(zs);
zs->LastPos = zs->Pos;
#ifdef ZMODEM_DEBUG