From c4ccfa65beaa2e0ec991f4537f657faec542fd70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Tue, 30 May 2023 11:49:28 +0000 Subject: [PATCH] Fixed memory leak in SQLite3_Server --- src/SQLite3_Server.cpp | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/SQLite3_Server.cpp b/src/SQLite3_Server.cpp index 6d7e606e7..371720149 100644 --- a/src/SQLite3_Server.cpp +++ b/src/SQLite3_Server.cpp @@ -1015,21 +1015,22 @@ static void *child_mysql(void *arg) { } } sess->to_process=1; - // Get and set the client address before the sesion is processed. - union { - struct sockaddr_in in; - struct sockaddr_in6 in6; - } custom_sockaddr; - struct sockaddr *addr=(struct sockaddr *)malloc(sizeof(custom_sockaddr)); - socklen_t addrlen=sizeof(custom_sockaddr); - memset(addr, 0, sizeof(custom_sockaddr)); - sess->client_myds->client_addrlen=addrlen; - sess->client_myds->client_addr=addr; - int g_rc = getpeername(sess->client_myds->fd, addr, &addrlen); - if (g_rc == -1) { - proxy_error("'getpeername' failed with error: %d\n", g_rc); + if (sess->client_myds->client_addr == NULL) { + // Get and set the client address before the sesion is processed. + union { + struct sockaddr_in in; + struct sockaddr_in6 in6; + } custom_sockaddr; + struct sockaddr *addr=(struct sockaddr *)malloc(sizeof(custom_sockaddr)); + socklen_t addrlen=sizeof(custom_sockaddr); + memset(addr, 0, sizeof(custom_sockaddr)); + sess->client_myds->client_addrlen=addrlen; + sess->client_myds->client_addr=addr; + int g_rc = getpeername(sess->client_myds->fd, addr, &addrlen); + if (g_rc == -1) { + proxy_error("'getpeername' failed with error: %d\n", g_rc); + } } - int rc=sess->handler(); if (rc==-1) goto __exit_child_mysql; }