From 2f118a01871481ceb3956fb348e2da7e7e8b1401 Mon Sep 17 00:00:00 2001 From: David Zhuang Date: Tue, 5 Aug 2025 17:45:06 -0700 Subject: [PATCH] use custom mem funcs --- lib/vquic/curl_ngtcp2.c | 9 ++++++--- lib/vquic/curl_osslq.c | 4 +++- lib/vquic/vquic.c | 28 ++++++++++++++++++++++++++++ lib/vquic/vquic.h | 9 +++++++++ 4 files changed, 46 insertions(+), 4 deletions(-) diff --git a/lib/vquic/curl_ngtcp2.c b/lib/vquic/curl_ngtcp2.c index 1cb99aaea8..49f3aeb529 100644 --- a/lib/vquic/curl_ngtcp2.c +++ b/lib/vquic/curl_ngtcp2.c @@ -1208,12 +1208,13 @@ static CURLcode init_ngh3_conn(struct Curl_cfilter *cf, } nghttp3_settings_default(&ctx->h3settings); + nghttp3_mem mem = {NULL, Curl_ngtcp2_malloc, Curl_ngtcp2_free, + Curl_ngtcp2_calloc, Curl_ngtcp2_realloc}; rc = nghttp3_conn_client_new(&ctx->h3conn, &ngh3_callbacks, &ctx->h3settings, - nghttp3_mem_default(), - cf); + &mem, cf); if(rc) { failf(data, "error creating nghttp3 connection instance"); return CURLE_OUT_OF_MEMORY; @@ -2466,12 +2467,14 @@ static const struct alpn_spec ALPN_SPEC_H3 = { ctx->q.local_addrlen); ngtcp2_addr_init(&ctx->connected_path.remote, &sockaddr->curl_sa_addr, (socklen_t)sockaddr->addrlen); + ngtcp2_mem mem = {NULL, Curl_ngtcp2_malloc, Curl_ngtcp2_free, + Curl_ngtcp2_calloc, Curl_ngtcp2_realloc}; rc = ngtcp2_conn_client_new(&ctx->qconn, &ctx->dcid, &ctx->scid, &ctx->connected_path, NGTCP2_PROTO_VER_V1, &ng_callbacks, &ctx->settings, &ctx->transport_params, - NULL, cf); + &mem, cf); if(rc) return CURLE_QUIC_CONNECT_ERROR; diff --git a/lib/vquic/curl_osslq.c b/lib/vquic/curl_osslq.c index c18801d811..4e4fa7fc6d 100644 --- a/lib/vquic/curl_osslq.c +++ b/lib/vquic/curl_osslq.c @@ -1103,10 +1103,12 @@ static CURLcode cf_osslq_h3conn_init(struct cf_osslq_ctx *ctx, SSL *conn, int rc; nghttp3_settings_default(&h3->settings); + nghttp3_mem mem = {NULL, Curl_ngtcp2_malloc, Curl_ngtcp2_free, + Curl_ngtcp2_calloc, Curl_ngtcp2_realloc}; rc = nghttp3_conn_client_new(&h3->conn, &ngh3_callbacks, &h3->settings, - nghttp3_mem_default(), + &mem, user_data); if(rc) { result = CURLE_OUT_OF_MEMORY; diff --git a/lib/vquic/vquic.c b/lib/vquic/vquic.c index bebe1df6f8..fa7f96cf51 100644 --- a/lib/vquic/vquic.c +++ b/lib/vquic/vquic.c @@ -723,6 +723,34 @@ CURLcode Curl_conn_may_http3(struct Curl_easy *data, return CURLE_OK; } +#if defined(USE_NGTCP2) || defined(USE_NGHTTP3) + +void *Curl_ngtcp2_malloc(size_t size, void *user_data) +{ + (void)user_data; + return Curl_cmalloc(size); +} + +void Curl_ngtcp2_free(void *ptr, void *user_data) +{ + (void)user_data; + Curl_cfree(ptr); +} + +void *Curl_ngtcp2_calloc(size_t nmemb, size_t size, void *user_data) +{ + (void)user_data; + return Curl_ccalloc(nmemb, size); +} + +void *Curl_ngtcp2_realloc(void *ptr, size_t size, void *user_data) +{ + (void)user_data; + return Curl_crealloc(ptr, size); +} + +#endif /* USE_NGTCP2 || USE_NGHTTP3 */ + #else /* CURL_DISABLE_HTTP || !USE_HTTP3 */ CURLcode Curl_conn_may_http3(struct Curl_easy *data, diff --git a/lib/vquic/vquic.h b/lib/vquic/vquic.h index 0f81334f29..f401de1479 100644 --- a/lib/vquic/vquic.h +++ b/lib/vquic/vquic.h @@ -49,6 +49,15 @@ CURLcode Curl_cf_quic_create(struct Curl_cfilter **pcf, extern struct Curl_cftype Curl_cft_http3; +#if defined(USE_NGTCP2) || defined(USE_NGHTTP3) + +void *Curl_ngtcp2_malloc(size_t size, void *user_data); +void Curl_ngtcp2_free(void *ptr, void *user_data); +void *Curl_ngtcp2_calloc(size_t nmemb, size_t size, void *user_data); +void *Curl_ngtcp2_realloc(void *ptr, size_t size, void *user_data); + +#endif /* USE_NGTCP2 || USE_NGHTTP3 */ + #else #define Curl_vquic_init() 1 #endif /* !CURL_DISABLE_HTTP && USE_HTTP3 */