Re: fixing Kannel leaks

Alexander Malysh <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Organization Centrium GmbH
Message-ID <[email protected]>
Hi Aarno,

would you please explain???

RCS file: /home/cvs/gateway/gw/dlr.c,v
retrieving revision 1.43
diff -u -B -b -r1.43 dlr.c
--- gw/dlr.c	15 Nov 2003 13:14:23 -0000	1.43
+++ gw/dlr.c	26 Nov 2003 10:15:54 -0000
@@ -362,10 +362,11 @@
  * NOTE: If typ is end status (e.g. DELIVERED) then dlr entry
  *       will be removed from DB.
  */
-Msg *dlr_find(const Octstr *smsc, const Octstr *ts, const Octstr *dst, int 
typ)
+Msg *dlr_find(Octstr *smsc, const Octstr *ts, const Octstr *dst, int typ)

why not const here? With const we just tell the caller: "we do not modify your 
arg."

 {
     Msg	*msg = NULL;
     struct dlr_entry *dlr = NULL;
+    Octstr *namos;

     if(octstr_len(smsc) == 0) {
 	warning(0, "DLR[%s]: Can't find a dlr without smsc-id", dlr_type());
@@ -373,16 +374,19 @@
     }

     /* check if we have handler registered */
-    if (handles == NULL || handles->dlr_get == NULL)
+    if (handles == NULL || handles->dlr_get == NULL) {
         return NULL;
+    }

+    namos = octstr_duplicate(smsc);

why duplicate smsc Octstr here and then free it ??
if dlr entry is not found we just avoid memory allocation...

     debug("dlr.dlr", 0, "DLR[%s]: Looking for DLR smsc=%s, ts=%s, dst=%s, 
type=%d",
-                                 dlr_type(), octstr_get_cstr(smsc), 
octstr_get_cstr(ts), octstr_get_cstr(dst), typ);
+                                 dlr_type(), octstr_get_cstr(namos), 
octstr_get_cstr(ts), octstr_get_cstr(dst), typ);

     dlr = handles->dlr_get(smsc, ts, dst);
     if (dlr == NULL)  {
         warning(0, "DLR[%s]: DLR for DST<%s> not found.",
                       dlr_type(), octstr_get_cstr(dst));
+        octstr_destroy(namos);
         return NULL;
     }

@@ -392,7 +396,7 @@
         msg->sms.sms_type = report;
         msg->sms.service = octstr_duplicate(dlr->service);
         msg->sms.dlr_mask = typ;
-        msg->sms.smsc_id = octstr_duplicate(dlr->smsc);
+        msg->sms.smsc_id = dlr->smsc;
         msg->sms.receiver = octstr_duplicate(dlr->destination);
         msg->sms.sender = octstr_duplicate(dlr->source);
         /* if dlr_url was present, recode it here again */
@@ -414,6 +418,7 @@
     } else {
         debug("dlr.dlr", 0, "DLR[%s]: Ignoring DLR message because of mask 
type=%d dlr->mask=%d", dlr_type(), typ, dlr->mask);
         /* ok that was a status report but we where not interested in having 
it */
+        dlr_entry_destroy(dlr);

why dlr_entry_destroy must be called here ???
see bellow... there we free that struct.

         msg = NULL;
     }

@@ -432,6 +437,7 @@
         }
     }

+    octstr_destroy(namos);
     /* destroy struct dlr_entry */
     dlr_entry_destroy(dlr);

The same agrs for dlr_mysq.c ...


On Wednesday 26 November 2003 11:53, Aarno Syvänen wrote:
> Hi List,
>
> I attach cvs diff for fixing kannel leaks (as tested with our mmsc).
> There are new wrappers I used to find these leaks., too. And
> there was one unhandled NULL pointer.
>
> Perhaps you check & test these

-- 
Best regards / Mit besten Grüßen aus Düsseldorf

Dipl.-Ing.
Alexander Malysh
___________________________________________

Centrium GmbH
Vogelsanger Weg 80
40470 Düsseldorf

Fon: +49 (0211) 74 84 51 80
Fax: +49 (0211) 277 49 109

email: [email protected]
web: www.centrium.de
msn: [email protected]
icq: 98063111
___________________________________________

Please avoid sending me Word, Excel or PowerPoint attachments.
See http://www.fsf.org/philosophy/no-word-attachments.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.