Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/fuzi_q.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ uint32_t fuzi_q_fuzzer(void* fuzz_ctx, picoquic_cnx_t* cnx,
void fuzzer_random_cid(fuzzer_ctx_t* ctx, picoquic_connection_id_t* icid);
void fuzi_q_fuzzer_init(fuzzer_ctx_t* fuzz_ctx, picoquic_connection_id_t* init_cid, picoquic_quic_t* quic);
void fuzi_q_fuzzer_release(fuzzer_ctx_t* fuzz_ctx);
void fuzzer_release_icid_ctx_by_icid(fuzzer_ctx_t* ctx, picoquic_connection_id_t* icid);

/* Unification of initial and basic fuzzer
* TODO: merge the two mechanisms in a single state
Expand Down
7 changes: 4 additions & 3 deletions lib/client.c
Original file line number Diff line number Diff line change
Expand Up @@ -54,13 +54,14 @@
*/

/* Clear a connection context */
void fuzi_q_release_connection(fuzi_q_cnx_ctx_t* cnx_ctx)
void fuzi_q_release_connection(fuzi_q_ctx_t* fuzi_q_ctx, fuzi_q_cnx_ctx_t* cnx_ctx)
{
if (cnx_ctx->quicperf_ctx != NULL) {
quicperf_delete_ctx(cnx_ctx->quicperf_ctx);
}
picoquic_demo_client_delete_context(&cnx_ctx->callback_ctx);
if (cnx_ctx->cnx_client != NULL) {
fuzzer_release_icid_ctx_by_icid(&fuzi_q_ctx->fuzz_ctx, &cnx_ctx->icid);
picoquic_delete_cnx(cnx_ctx->cnx_client);
}
memset(cnx_ctx, 0, sizeof(fuzi_q_cnx_ctx_t));
Expand Down Expand Up @@ -270,7 +271,7 @@ void fuzi_q_release_client_context(fuzi_q_ctx_t* fuzi_q_ctx)
{
if (fuzi_q_ctx->cnx_ctx != NULL) {
for (size_t i = 0; i < fuzi_q_ctx->nb_cnx_ctx; i++) {
fuzi_q_release_connection(&fuzi_q_ctx->cnx_ctx[i]);
fuzi_q_release_connection(fuzi_q_ctx, &fuzi_q_ctx->cnx_ctx[i]);
}
free(fuzi_q_ctx->cnx_ctx);
fuzi_q_ctx->cnx_ctx = NULL;
Expand Down Expand Up @@ -346,7 +347,7 @@ int fuzi_q_loop_check_cnx(fuzi_q_ctx_t* fuzi_q_ctx, uint64_t current_time, int *
if (fuzi_q_ctx->fuzz_mode == fuzi_q_mode_client && !cnx_ctx->was_fuzzed) {
DBG_PRINTF("Connection stopped without being fuzzed: %02x%02x...", cnx_ctx->icid.id[0], cnx_ctx->icid.id[1]);
}
fuzi_q_release_connection(cnx_ctx);
fuzi_q_release_connection(fuzi_q_ctx, cnx_ctx);
*is_active = 1;
}
}
Expand Down
15 changes: 15 additions & 0 deletions lib/fuzzer.c
Original file line number Diff line number Diff line change
Expand Up @@ -2497,3 +2497,18 @@ uint32_t fuzi_q_fuzzer(void* fuzz_ctx_param, picoquic_cnx_t* cnx,
}
return fuzzed_length;
}

void fuzzer_release_icid_ctx_by_icid(fuzzer_ctx_t* ctx, picoquic_connection_id_t* icid)
{
fuzzer_icid_ctx_t** pp_icid_ctx = &ctx->first_icid_ctx;

while (*pp_icid_ctx != NULL) {
if (picoquic_compare_connection_id(icid, &(*pp_icid_ctx)->icid) == 0) {
fuzzer_icid_ctx_t* released_ctx = *pp_icid_ctx;
*pp_icid_ctx = released_ctx->next_icid_ctx;
fuzzer_release_icid_ctx(released_ctx);
break;
}
pp_icid_ctx = &(*pp_icid_ctx)->next_icid_ctx;
}
}
Loading