Module: kamailio
Branch: master
Commit: f390a654ee9d2c2059669e0209926096c978ff11
URL: 
https://github.com/kamailio/kamailio/commit/f390a654ee9d2c2059669e0209926096c978ff11

Author: Daniel-Constantin Mierla <mico...@gmail.com>
Committer: Daniel-Constantin Mierla <mico...@gmail.com>
Date: 2025-04-12T17:18:23+02:00

lost: keep pointer to original geo value

- triming can lose the start pointer and free is going to fail
- init more local variables

---

Modified: src/modules/lost/functions.c

---

Diff:  
https://github.com/kamailio/kamailio/commit/f390a654ee9d2c2059669e0209926096c978ff11.diff
Patch: 
https://github.com/kamailio/kamailio/commit/f390a654ee9d2c2059669e0209926096c978ff11.patch

---

diff --git a/src/modules/lost/functions.c b/src/modules/lost/functions.c
index 96886db9a08..5c653423144 100644
--- a/src/modules/lost/functions.c
+++ b/src/modules/lost/functions.c
@@ -173,9 +173,9 @@ char *lost_held_type(char *type, int *exact, int *lgth)
 int lost_held_function(struct sip_msg *_m, char *_con, char *_pidf, char *_url,
                char *_err, char *_id)
 {
-       pv_spec_t *pspidf;
-       pv_spec_t *psurl;
-       pv_spec_t *pserr;
+       pv_spec_t *pspidf = NULL;
+       pv_spec_t *psurl = NULL;
+       pv_spec_t *pserr = NULL;
 
        pv_value_t pvpidf;
        pv_value_t pvurl;
@@ -187,9 +187,10 @@ int lost_held_function(struct sip_msg *_m, char *_con, 
char *_pidf, char *_url,
        xmlNodePtr root = NULL;
        xmlNodePtr cur_node = NULL;
 
-       str geo = STR_NULL; /* return value geolocation uri */
-       str res = STR_NULL; /* return value pidf */
-       str err = STR_NULL; /* return value error */
+       str geo = STR_NULL;      /* return value geolocation uri */
+       str egeo = STR_NULL; /* entire value geolocation uri */
+       str res = STR_NULL;      /* return value pidf */
+       str err = STR_NULL;      /* return value error */
 
        str url = STR_NULL;
        str did = STR_NULL;
@@ -261,6 +262,7 @@ int lost_held_function(struct sip_msg *_m, char *_con, char 
*_pidf, char *_url,
 
                        LM_DBG("parsing From header\n");
 
+                       lost_free_string(&idhdr);
                        /* id from From header */
                        idhdr.s = lost_get_from_header(_m, &idhdr.len);
                        if(idhdr.len == 0) {
@@ -282,7 +284,6 @@ int lost_held_function(struct sip_msg *_m, char *_con, char 
*_pidf, char *_url,
        lost_free_held(&held); /* clean up */
        if(que.len == 0) {
                LM_ERR("held request document error\n");
-               que.s = NULL;
                goto err;
        }
 
@@ -410,14 +411,16 @@ int lost_held_function(struct sip_msg *_m, char *_con, 
char *_pidf, char *_url,
 
                                        LM_DBG("*** node '%s' found\n", 
cur_node->name);
 
+                                       lost_free_string(&egeo);
                                        /* get the locationUri element */
-                                       geo.s = lost_get_content(
-                                                       root, (char 
*)HELD_TYPE_URI, &geo.len);
-                                       if(geo.len == 0) {
+                                       egeo.s = lost_get_content(
+                                                       root, (char 
*)HELD_TYPE_URI, &egeo.len);
+                                       if(egeo.len == 0) {
                                                LM_WARN("%s element not 
found\n", HELD_TYPE_URI);
-                                               geo.s = NULL;
+                                               lost_free_string(&egeo);
                                        } else {
-                                               geo.s = 
lost_trim_content(geo.s, &geo.len);
+                                               geo.len = egeo.len;
+                                               geo.s = 
lost_trim_content(egeo.s, &geo.len);
                                        }
                                }
                                if(xmlStrcmp(cur_node->name, (const xmlChar 
*)"presence")
@@ -509,7 +512,7 @@ int lost_held_function(struct sip_msg *_m, char *_con, char 
*_pidf, char *_url,
        pvurl.flags = PV_VAL_STR;
        psurl = (pv_spec_t *)_url;
        psurl->setf(_m, &psurl->pvp, (int)EQ_T, &pvurl);
-       lost_free_string(&geo); /* clean up */
+       lost_free_string(&egeo); /* clean up */
 
        /* return error code in case of response error */
        if(err.len > 0) {
@@ -536,15 +539,9 @@ int lost_held_function(struct sip_msg *_m, char *_con, 
char *_pidf, char *_url,
                xmlFreeDoc(doc);
        }
        /* clean up string */
-       if(res.s != NULL && res.len > 0) {
-               lost_free_string(&res);
-       }
-       if(geo.s != NULL && geo.len > 0) {
-               lost_free_string(&geo);
-       }
-       if(err.s != NULL && err.len > 0) {
-               lost_free_string(&err);
-       }
+       lost_free_string(&res);
+       lost_free_string(&egeo);
+       lost_free_string(&err);
 
        return LOST_CLIENT_ERROR;
 }

_______________________________________________
Kamailio - Development Mailing List -- sr-dev@lists.kamailio.org
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the 
sender!

Reply via email to