]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Fix memory leak within getsessid
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Tue, 1 Jul 2025 13:21:56 +0000 (09:21 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Tue, 1 Jul 2025 13:21:56 +0000 (09:21 -0400)
lib/lvleml.c

index c8009afc77388c97994a5be293976d0f49d8e3ac..8c25d3bc6373b793dbe6b514d096572d97b5bd42 100644 (file)
 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);