- Guard the retry against a negative cnt_w so a non-sentinel
send error cannot become a negative memmove offset.
- Clear windowFullExt at the stdout and childFd save sites so
stream ownership is set unconditionally.
ChannelIdSend / extended_data_send returning WS_WANT_WRITE set
wantWrite but didn't save cnt_r, so the next read overwrote the
held bytes. Store cnt_r in windowFull at all three read sites
(stderr, stdout, pty childFd); flag windowFullExt for stderr so
the retry routes through extended_data_send.
Stderr and stdout shared shellBuffer/windowFull, so a stderr hold
retried on stdout, and a stderr partial send let the stdout read
clobber the remainder. Tag the held bytes with windowFullExt;
retry via extended_data_send and skip the stdout read when set.
SIGCHLD from the exec child interrupts select(), returning -1 and
breaking the loop. Any windowFull data awaiting a peer window adjust
was then abandoned, causing intermittent 32 KB truncations on large
exec transfers. Continue on EINTR.
1. Loop WPWRITE until the full chunk is written, advancing the
split 64-bit offset with carry. Bail out on error or a zero
return and report WOLFSSH_FTP_FAILURE so clients see the
truncation instead of a silent success.
2. Update the backup WPWRITE() implemented with fwrite() to
parallel the behavior of the backup WPREAD(). Changed to write
sz number of 1 byte objects.
Issue: F-3880
Per RFC 8308 Section 2.1.
1. The server will now advertize that it accepts an ext-info message.
2. The client and server will send the ext-info message if requested and
and allowed. The per-side send functions are guarded based on
configuration. The wolfSSH client currently doesn't have anything to
say in an ext-info message.
Issue: F-3448
- Per RFC 4253 4.2 use WSTRNCMP instead of WSTRNCASECMP for
prefix and full-ID comparisons.
- Update client tests; add server test vectors expecting
rejection of lowercase/mixed case.
Issue: F-2865
- Reject SSH_MSG_NEWKEYS when len != 0 per RFC 4253 7.3.
- Update wolfSSH_TestDoNewKeys to take buf/len/idx instead
of assuming NULL/0, and add a non-zero len test case.
Issue: F-2079
- Without the guard, inner loops short-circuit and WS_SUCCESS
is returned without any verification.
- Add test case covering the new and existing bad-arg paths.
Issue: F-409
- Guard escBuf[i] read when getArgs consumes all input without a command.
- Cap WMEMCPY against WOLFSSL_MAX_ESCBUF; escBufSz can exceed 16.
- Update escBufSz on WS_WANT_READ resume so CSI leftovers survive
multi-fill reads.
Issue: F-250
- Zero private key and password buffers in both apps/wolfssh
and examples client.
- Also zero keyboard-interactive response buffers in the
example client.
Issue: F-249
- Expose CheckAuthKeysLine under WOLFSSHD_UNIT_TEST so tests can link it.
- Add test_CheckAuthKeysLine covering match, different key, and same-length
key differing only in the last byte.
- Route the test Log() to stderr instead of an unused local buffer.
Issue: F-4107
1. Update WOLFSSL_REF to v5.9.1-stable in the ML-KEM and single-thread
tests (interop-mlkem.yml, singlethread-check.yml).
2. Drop kyber.yml; its coverage is a strict subset of interop-mlkem.yml.
Fold its push and workflow_dispatch triggers into interop-mlkem.yml so
ML-KEM still runs on master/release pushes and via manual dispatch.
3. Drop liboqs from the ML-KEM test. It isn't in configure.ac any more.
- Add retain-on-free and size-tracking capture allocators to inspect
freed buffers post-free.
- Verify SshResourceFree zeroes ssh->k, ssh->keys, and ssh->peerKeys
before wolfSSH_free releases the struct.
- Verify KeyAgreeDh_client wipes ssh->handshake->x even when wc_DhAgree
fails (ForceZero is unconditional).
- Verify KeyAgreeDh_server zeroes the MAX_KEX_KEY_SZ y_ptr allocation
under WOLFSSH_SMALL_STACK via 0xCC poisoning.
- Expose KeyAgreeDh_client / KeyAgreeDh_server via wolfSSH_Test* hooks
under WOLFSSH_TEST_INTERNAL.
Issues: F-2488, F-2492, F-2493, F-2875
- Apply the prior FATFS fix across Nucleus, MQX, Windows,
Zephyr, Harmony, and user-filesystem readdir paths.
- Prevents double-free crash when SFTPNAME_free runs on a
name struct after readdir returns an error.
- Add SetAttrTime() helper to decode fdate/ftime into a Unix
timestamp via mktime() and assigns it to atr->atime/mtime.
- Use it from both SFTP_GetAttributes() (was using raw fdate) and
SFTP_GetAttributes_Handle() (was using raw ftime, losing the date).
- Set expectMsgId to MSGID_KEXDH_GEX_INIT so the server rejects
any other KEX message at this stage (RFC 4419 sec 3).
- Reject NULL ssh->handshake in the entry check now that the
success path dereferences it.
Issue: F-3668
- ForceZero newKey before WFREE in DoPemKey/DoOpenSshKey,
covering both locally-allocated and caller-supplied buffers.
- ForceZero PEM file buffer after read in wolfSSH_ReadKey_file
- Track newKeySz for caller-supplied buffer path
Issue: F-2885, F-3211, F-3212
- Replace `strSz > maxSz - WOLFSSH_SFTP_HEADER - idx`
with `strSz > WOLFSSH_MAX_SFTP_RW` to prevent unsigned
wraparound and downstream WMALLOC size overflow.
- Apply to both POSIX and Windows variants.
Issue: F-3682
- Map ed25519 verify_msg_final errors to WS_CRYPTO_FAILED
and status==0 to WS_ED25519_E (no longer overwritten)
- Expose DoUserAuthRequestEd25519 via test shim
- Add unit test covering valid and tampered signatures
Issue: F-3445