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

Author: Daniel-Constantin Mierla <[email protected]>
Committer: Daniel-Constantin Mierla <[email protected]>
Date: 2025-12-10T09:58:37+01:00

json: use formatted string evaluation instead of fixup mechanism for 
transformation

---

Modified: src/modules/json/json_trans.c

---

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

---

diff --git a/src/modules/json/json_trans.c b/src/modules/json/json_trans.c
index 2c44d2d1226..356636f18f8 100644
--- a/src/modules/json/json_trans.c
+++ b/src/modules/json/json_trans.c
@@ -226,7 +226,6 @@ int json_tr_eval(
        pv_value_t *pv;
        pv_value_t v;
        str v2 = {0, 0};
-       void *v1 = NULL;
 
        if(val == NULL || (val->flags & PV_VAL_NULL))
                return -1;
@@ -260,7 +259,6 @@ int json_tr_eval(
                        val->rs.len = pv->rs.len;
 
                        json_destroy_pv_value(pv);
-                       json_free_pv_value(val);
 
                        break;
                case TR_JSON_PARSE:
@@ -272,44 +270,32 @@ int json_tr_eval(
                                return -1;
                        }
 
-                       pv = json_alloc_pv_value();
-                       if(pv == NULL) {
-                               LM_ERR("JSON encode transform : no more private 
memory\n");
-                               return -1;
-                       }
-
-
                        if(tp->type == TR_PARAM_STRING) {
                                if(str_search_char(&tp->v.s, '$') == NULL) {
                                        v2 = tp->v.s;
                                } else {
-                                       v1 = tp->v.s.s;
-                                       if(fixup_spve_null(&v1, 1) != 0) {
-                                               LM_ERR("cannot get spve_value 
from TR_PARAM_STRING : "
+                                       if(pv_eval_str(msg, &v2, &tp->v.s) < 0) 
{
+                                               LM_ERR("cannot get the value 
from TR_PARAM_STRING : "
                                                           "%.*s\n",
                                                                tp->v.s.len, 
tp->v.s.s);
-                                               pkg_free(pv);
                                                return -1;
                                        }
-                                       if(fixup_get_svalue(msg, (gparam_p)v1, 
&v2) != 0) {
-                                               LM_ERR("cannot get value from 
TR_PARAM_STRING\n");
-                                               fixup_free_spve_null(&v1, 1);
-                                               pkg_free(pv);
-                                               return -1;
-                                       }
-                                       fixup_free_spve_null(&v1, 1);
                                }
                                sv = v2;
                        } else {
                                if(pv_get_spec_value(msg, 
(pv_spec_p)tp->v.data, &v) != 0
                                                || (!(v.flags & PV_VAL_STR)) || 
v.rs.len <= 0) {
                                        LM_ERR("value cannot get spec value in 
json transform\n");
-                                       json_destroy_pv_value(pv);
                                        return -1;
                                }
                                sv = v.rs;
                        }
 
+                       pv = json_alloc_pv_value();
+                       if(pv == NULL) {
+                               LM_ERR("JSON parse transform : no more private 
memory\n");
+                               return -1;
+                       }
 
                        if(tr_json_get_field_ex(&val->rs, &sv, pv) != 1) {
                                LM_ERR("error getting json\n");
@@ -326,7 +312,6 @@ int json_tr_eval(
                        val->rs.len = pv->rs.len;
 
                        json_destroy_pv_value(pv);
-                       json_free_pv_value(val);
 
                        break;
 

_______________________________________________
Kamailio - Development Mailing List -- [email protected]
To unsubscribe send an email to [email protected]
Important: keep the mailing list in the recipients, do not reply only to the 
sender!

Reply via email to