Skip to content

Commit bfc55d9

Browse files
Merge pull request #8848 from julek-wolfssl/gh/8841
dtlsProcessPendingPeer: correctly set the current peer
2 parents 407a125 + 736a5e1 commit bfc55d9

4 files changed

Lines changed: 52 additions & 1 deletion

File tree

src/internal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21858,7 +21858,7 @@ static void dtlsProcessPendingPeer(WOLFSSL* ssl, int deprotected)
2185821858
else {
2185921859
/* Pending peer present and record deprotected. Update the peer. */
2186021860
(void)wolfSSL_dtls_set_peer(ssl,
21861-
&ssl->buffers.dtlsCtx.pendingPeer.sa,
21861+
ssl->buffers.dtlsCtx.pendingPeer.sa,
2186221862
ssl->buffers.dtlsCtx.pendingPeer.sz);
2186321863
ssl->buffers.dtlsCtx.processingPendingRecord = 0;
2186421864
dtlsClearPeer(&ssl->buffers.dtlsCtx.pendingPeer);

tests/api.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68249,6 +68249,7 @@ TEST_CASE testCases[] = {
6824968249
TEST_DECL(test_dtls12_missing_finished),
6825068250
TEST_DECL(test_dtls13_missing_finished_client),
6825168251
TEST_DECL(test_dtls13_missing_finished_server),
68252+
TEST_DECL(test_wolfSSL_dtls_set_pending_peer),
6825268253
TEST_DECL(test_tls13_pq_groups),
6825368254
TEST_DECL(test_tls13_early_data),
6825468255
TEST_DECL(test_tls_multi_handshakes_one_record),

tests/api/test_dtls.c

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -598,6 +598,55 @@ int test_wolfSSL_dtls_cid_parse(void)
598598
return EXPECT_RESULT();
599599
}
600600

601+
int test_wolfSSL_dtls_set_pending_peer(void)
602+
{
603+
EXPECT_DECLS;
604+
#if defined(HAVE_MANUAL_MEMIO_TESTS_DEPENDENCIES) && \
605+
defined(WOLFSSL_DTLS) && defined(WOLFSSL_DTLS_CID)
606+
WOLFSSL_CTX *ctx_c = NULL, *ctx_s = NULL;
607+
WOLFSSL *ssl_c = NULL, *ssl_s = NULL;
608+
struct test_memio_ctx test_ctx;
609+
unsigned char peer[10];
610+
unsigned int peerSz;
611+
unsigned char readBuf[10];
612+
unsigned char client_cid[] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
613+
unsigned char server_cid[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
614+
615+
XMEMSET(&test_ctx, 0, sizeof(test_ctx));
616+
617+
/* Setup DTLS contexts */
618+
ExpectIntEQ(test_memio_setup(&test_ctx, &ctx_c, &ctx_s, &ssl_c, &ssl_s,
619+
wolfDTLS_client_method, wolfDTLS_server_method), 0);
620+
621+
ExpectIntEQ(wolfSSL_dtls_cid_use(ssl_c), 1);
622+
ExpectIntEQ(wolfSSL_dtls_cid_set(ssl_c, server_cid,
623+
sizeof(server_cid)), 1);
624+
ExpectIntEQ(wolfSSL_dtls_cid_use(ssl_s), 1);
625+
ExpectIntEQ(wolfSSL_dtls_cid_set(ssl_s, client_cid,
626+
sizeof(client_cid)), 1);
627+
628+
ExpectIntEQ(test_memio_do_handshake(ssl_c, ssl_s, 10, NULL), 0);
629+
630+
peerSz = sizeof(peer);
631+
/* Fail since no peer set */
632+
ExpectIntEQ(wolfSSL_dtls_get_peer(ssl_s, peer, &peerSz), 0);
633+
ExpectIntEQ(wolfSSL_dtls_set_pending_peer(ssl_s, (void*)"123", 4), 1);
634+
ExpectIntEQ(wolfSSL_write(ssl_c, "test", 5), 5);
635+
ExpectIntEQ(wolfSSL_read(ssl_s, readBuf, sizeof(readBuf)), 5);
636+
ExpectStrEQ(readBuf, "test");
637+
peerSz = sizeof(peer);
638+
ExpectIntEQ(wolfSSL_dtls_get_peer(ssl_s, peer, &peerSz), 1);
639+
ExpectIntEQ(peerSz, 4);
640+
ExpectStrEQ(peer, "123");
641+
642+
wolfSSL_free(ssl_s);
643+
wolfSSL_free(ssl_c);
644+
wolfSSL_CTX_free(ctx_s);
645+
wolfSSL_CTX_free(ctx_c);
646+
#endif
647+
return EXPECT_RESULT();
648+
}
649+
601650
int test_dtls13_epochs(void) {
602651
EXPECT_DECLS;
603652
#if defined(WOLFSSL_DTLS13) && !defined(NO_WOLFSSL_CLIENT)

tests/api/test_dtls.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
int test_dtls12_basic_connection_id(void);
2626
int test_dtls13_basic_connection_id(void);
2727
int test_wolfSSL_dtls_cid_parse(void);
28+
int test_wolfSSL_dtls_set_pending_peer(void);
2829
int test_dtls13_epochs(void);
2930
int test_dtls13_ack_order(void);
3031
int test_dtls_version_checking(void);

0 commit comments

Comments
 (0)