- 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
ClientPublicKeyCheck() prompted to add an unknown server's key
to known_hosts but, if the user declined, left ret at 0 and
returned WS_SUCCESS, silently accepting the unverified host.
Set ret = -1 in the else branch to mirror the otherMatch case
and abort the handshake when the user does not confirm.
Issue: F-3444
- Track txMsgCount/rxMsgCount per key epoch and reset on NEW_KEYS;
seq/peerSeq still wrap freely per RFC 4253 Sec 6.4.
- Extend HighwaterCheck to fire highwaterCb when packet count crosses
msgHighwaterMark (default 2^31, RFC 4344 Sec 3.1).
- Add wolfSSH_CTX_SetMsgHighwater / SetMsgHighwater / GetMsgHighwater.
- Consolidate receive-path HighwaterCheck into DoPacket so byte- and
packet-count thresholds share a single canonical fire site.
Issue: F-246
- Replace raw ato32() with GetUint32() to check len.
- Return WS_BUFFER_E on short payload instead of reading
past buffer end.
- DoDisconnect: parse the description and language identifier
strings with GetSkip() so a truncated record returns
WS_BUFFER_E instead of being treated as success.
Issue: F-413
WS_MoveFileA allocated unicodeOldName but did not free it when the
follow-up mbstowcs_s calls failed. Check the conversion result after
filling unicodeOldName, and free it before returning when the sizing
call for unicodeNewName fails.
Affected function: WS_MoveFileA.
Issue: F-50
Capture the return value, clear state unconditionally, and report
parse failure or non-OK server status via ssh->error instead of
discarding the result.
Issue: CID 572873