From 480c327c12e2fa408f15cf569dd943144a90d561 Mon Sep 17 00:00:00 2001 From: "Jean-Marc Pigeon (Delson)" Date: Tue, 1 Jul 2025 09:21:56 -0400 Subject: [PATCH] Fix memory leak within getsessid --- lib/lvleml.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/lvleml.c b/lib/lvleml.c index c8009af..8c25d3b 100644 --- a/lib/lvleml.c +++ b/lib/lvleml.c @@ -38,9 +38,12 @@ static void freesessid(CONTYP *contact) { -if ((contact->session!=(SESTYP *)0)&&(contact->mailfrom!=(char *)0)) { - contact->session->sfrom=strdup(contact->mailfrom); - (void) sql_mngses(contact->sqlptr,sql_update,&(contact->session)); +(void) rou_alert(0,"JMPDBG freesessid contact->session='%p'",contact->session); +if (contact->session!=(SESTYP *)0) { + if (contact->mailfrom!=(char *)0) { + contact->session->sfrom=strdup(contact->mailfrom); + (void) sql_mngses(contact->sqlptr,sql_update,&(contact->session)); + } contact->session=sql_freeses(contact->session); } } @@ -56,10 +59,10 @@ if ((contact->session!=(SESTYP *)0)&&(contact->mailfrom!=(char *)0)) { static void getsessid(CONTYP *contact) { +(void) rou_alert(0,"JMPDBG getsessid!"); if (contact!=(CONTYP *)0) { char *newsid; - contact->session=(SESTYP *)calloc(1,sizeof(SESTYP)); newsid=eml_getcursesid(contact->mainsesid,contact->numreset); contact->session=(SESTYP *)calloc(1,sizeof(SESTYP)); contact->session->sessid=newsid; @@ -417,6 +420,9 @@ while (proceed==true) { break; case 5 : //check password (void) rou_alert(0,"JMPDBG decoded=<%s>",decoded); + break; + case 6 : //everything is fine + decoded=rou_freestr(decoded); (void) transmit(contact,true,"%d 5.7.4 Authentication successful",IDOK); break; default : //SAFE Guard @@ -1902,7 +1908,7 @@ _Bool proceed; phase=0; proceed=true; while (proceed==true) { - //(void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase); + (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase); switch (phase){ case 0 : //check for binding if (contact==(CONTYP *)0) { @@ -1914,8 +1920,6 @@ while (proceed==true) { (void) rou_alert(0,"Contact from peer <%s> to port <%s> terminated", contact->peerip,contact->locserv); contact->socptr=soc_release(contact->socptr); - //(void) kill(getppid(),SIGCHLD); - //(void) rou_alert(0,"%s JMPDBG signal SIGCHLD sent to='%d'",OPEP,getppid()); break; case 2 : //freeing contact memory contact=freecontact(contact); -- 2.47.3