<div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div>Hi:</div><div>I am trying to use json module in script with json_get_field exported api, I found in it's implementation, the api will call struct json_object *j = json_tokener_parse(json_s.s); but didn't call json_object_put for this j object, then the object will leak. So my question is how to release the new j object? We can't release in json_get_field(), that will cause the returned string become to rubbish, thanks!</div><div>Below is the api's code in module\json\json_funcs.c:</div><div><div>int json_get_field(struct sip_msg* msg, char* json, char* field, char* dst)</div><div>{</div><div>  str json_s;</div><div>  str field_s;</div><div>  pv_spec_t *dst_pv;</div><div>  pv_value_t dst_val;</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>if (fixup_get_svalue(msg, (gparam_p)json, &json_s) != 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">               </span>LM_ERR("cannot get json string value\n");</div><div><span class="Apple-tab-span" style="white-space:pre">          </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>if (fixup_get_svalue(msg, (gparam_p)field, &field_s) != 0) {</div><div><span class="Apple-tab-span" style="white-space:pre">             </span>LM_ERR("cannot get field string value\n");</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><span class="Apple-tab-span" style="white-space:pre">    </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>dst_pv = (pv_spec_t *)dst;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>struct json_object *j = json_tokener_parse(json_s.s);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">       </span>if (is_error(j)) {</div><div><span class="Apple-tab-span" style="white-space:pre">           </span>LM_ERR("empty or invalid JSON\n");</div><div><span class="Apple-tab-span" style="white-space:pre">         </span>return -1;</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>char *value = (char*)json_object_to_json_string(json_object_object_get(j, field_s.s));</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>dst_val.rs.s = value;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>dst_val.rs.len = strlen(value);</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>dst_val.flags = PV_VAL_STR;</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>dst_pv->setf(msg, &dst_pv->pvp, (int)EQ_T, &dst_val);</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre"> </span>return 1;</div><div>}</div></div><br><blockquote id="isReplyContent" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><br>
</blockquote></div><br><br><span title="neteasefooter"><span id="netease_mail_footer"></span></span>