Hello,<br><br>While developing and testing my new application (app_java) I&#39;ve experienced a very wierd behaviour.<br><br>a simple line:<br> ismethod(free(malloc(0))); <br>in kamailio config file produces a segfault:<br>

 0(2227) ERROR: &lt;core&gt; [cfg.y:3455]: cfg. parser: failed to find command malloc<br> 0(2227) : &lt;core&gt; [cfg.y:3594]: parse error in config file /opt/kamailio/etc/kamailio/kamailio.cfg, line 640, column 25: unknown command, missing loadmodule?<br>

<br><br>Program received signal SIGSEGV, Segmentation fault.<br>0x081defde in yyparse () at cfg.y:3480<br>3480                    if ($1 &amp;&amp; mod_func_action-&gt;val[1].u.number &lt; MAX_ACTIONS-2) {<br>(gdb)<br><br>

<br>so, let&#39;s pass a very wierd values :-) :<br>See following:<br>
<br><br>here is a small code snippet:<br>----------<br>exported functions definition (params from 2 to 7): { &quot;java_exec&quot;, (cmd_function)java_exec, 7,   NULL, 0,       ANY_ROUTE },<br>function prototype: int java_exec(struct sip_msg *msg, char *method_name, char *signature, char *p1, char *p2, char *p3, char *p4, char *p5);<br>

----------<br><br>1)<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;&quot;, &quot;str1&quot;, &quot;str2&quot;, &quot;str3&quot;);<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;&quot;, &quot;str1&quot;, 5, &quot;str3&quot;);<br>

<br><br> 0(854) ERROR: app_java [java_iface.c:81]: java_exec(): method_name=&#39;test&#39;, signature=&#39;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;&#39;, params: &#39;str1&#39;, &#39;str2&#39;, &#39;str3&#39;, &#39;(null)&#39;, &#39;(null)&#39;<br>

 0(854) ERROR: app_java [java_iface.c:81]: java_exec(): method_name=&#39;test&#39;, signature=&#39;Ljava/lang/String;ILjava/lang/String;&#39;, params: &#39;str1&#39;, &#39;5&#39;, &#39;str3&#39;, &#39;(null)&#39;, &#39;(null)&#39;<br>

<br><br>2)<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;B&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, 77);<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;B&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, 0x77);<br>

<br> 0(854) ERROR: app_java [java_iface.c:81]: java_exec(): method_name=&#39;test&#39;, signature=&#39;Ljava/lang/String;ILjava/lang/String;B&#39;, params: &#39;str1&#39;, &#39;5&#39;, &#39;str3&#39;, &#39;77&#39;, &#39;(null)&#39;<br>

 0(877) ERROR: app_java [java_iface.c:81]: java_exec(): method_name=&#39;test&#39;, signature=&#39;Ljava/lang/String;ILjava/lang/String;B&#39;, params: &#39;str1&#39;, &#39;5&#39;, &#39;str3&#39;, &#39;119&#39;, &#39;(null)&#39;<br>

<br> so, 77 is &#39;77&#39;, 0x77 is &#39;119&#39; (hex conversion, ok)<br><br>3)<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;Z&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, true);<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;Z&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, false);<br>

<br> 0(907) ERROR: app_java [java_iface.c:81]: java_exec(): method_name=&#39;test&#39;, signature=&#39;Ljava/lang/String;ILjava/lang/String;Z&#39;, params: &#39;str1&#39;, &#39;5&#39;, &#39;str3&#39;, &#39;1&#39;, &#39;(null)&#39;<br>

 0(907) ERROR: app_java [java_iface.c:81]: java_exec(): method_name=&#39;test&#39;, signature=&#39;Ljava/lang/String;ILjava/lang/String;Z&#39;, params: &#39;str1&#39;, &#39;5&#39;, &#39;str3&#39;, &#39;0&#39;, &#39;(null)&#39;<br>

<br> so, true is &#39;1&#39;, false is &#39;0&#39;. What is it ?<br><br>4)<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;Z&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, TRUE);<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;Z&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, FALSE);<br>

<br> 0(931) : &lt;core&gt; [cfg.y:3594]: parse error in config file /opt/kamailio/etc/kamailio/kamailio.cfg, line 632, column 86: syntax error<br> 0(931) : &lt;core&gt; [cfg.y:3594]: parse error in config file /opt/kamailio/etc/kamailio/kamailio.cfg, line 632, column 86: &#39;(&#39;&#39;)&#39; expected (function call)<br>

 0(931) : &lt;core&gt; [cfg.y:3594]: parse error in config file /opt/kamailio/etc/kamailio/kamailio.cfg, line 633, column 87: syntax error<br> 0(931) : &lt;core&gt; [cfg.y:3594]: parse error in config file /opt/kamailio/etc/kamailio/kamailio.cfg, line 633, column 87: &#39;(&#39;&#39;)&#39; expected (function call)<br>

ERROR: bad config file (4 errors)<br><br>5)<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;Z&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, is_method(&quot;INVITE&quot;));<br><br>Program received signal SIGSEGV, Segmentation fault.<br>

fix_rval_expr (p=p@entry=0xb55dad00) at rvalue.c:3791<br>3791                            return fix_rval(&amp;rve-&gt;left.rval);<br>(gdb)<br><br>6)<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;Z&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, is_unknown_method(&quot;INVITE&quot;));<br>

<br>Program received signal SIGSEGV, Segmentation fault.<br>0x081defde in yyparse () at cfg.y:3480<br>3480                    if ($1 &amp;&amp; mod_func_action-&gt;val[1].u.number &lt; MAX_ACTIONS-2) {<br>(gdb)<br><br><br>

7)<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;Z&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, nonexistent_value);<br><br> 0(1022) : &lt;core&gt; [cfg.y:3594]: parse error in config file /opt/kamailio/etc/kamailio/kamailio.cfg, line 634, column 99: syntax error<br>

 0(1022) : &lt;core&gt; [cfg.y:3594]: parse error in config file /opt/kamailio/etc/kamailio/kamailio.cfg, line 634, column 99: &#39;(&#39;&#39;)&#39; expected (function call)<br>ERROR: bad config file (2 errors)<br><br>8)<br>

 java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;Z&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, nonexistent_function());<br><br> 0(1035) : &lt;core&gt; [cfg.y:3594]: parse error in config file /opt/kamailio/etc/kamailio/kamailio.cfg, line 634, column 99: syntax error<br>

 0(1035) : &lt;core&gt; [cfg.y:3594]: parse error in config file /opt/kamailio/etc/kamailio/kamailio.cfg, line 634, column 99: &#39;(&#39;&#39;)&#39; expected (function call)<br> 0(1035) ERROR: &lt;core&gt; [cfg.y:3455]: cfg. parser: failed to find command nonexistent_function<br>

 0(1035) : &lt;core&gt; [cfg.y:3594]: parse error in config file /opt/kamailio/etc/kamailio/kamailio.cfg, line 635, column 103: unknown command, missing loadmodule?<br><br><br>Program received signal SIGSEGV, Segmentation fault.<br>

0x081defde in yyparse () at cfg.y:3480<br>3480                    if ($1 &amp;&amp; mod_func_action-&gt;val[1].u.number &lt; MAX_ACTIONS-2) {<br>(gdb)<br><br><br>9)<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;Z&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, 7777777777777777777777777777777777);<br>

<br> 0(1368) ERROR: app_java [java_iface.c:81]: java_exec(): method_name=&#39;test&#39;, signature=&#39;Ljava/lang/String;ILjava/lang/String;Z&#39;, params: &#39;str1&#39;, &#39;5&#39;, &#39;str3&#39;, &#39;2147483647&#39;, &#39;(null)&#39;<br>

<br> so, 7777777777777777777777777777777777 is &#39;2147483647&#39; (INT_MAX)<br><br>10)<br> java_exec(&quot;test&quot;, &quot;Ljava/lang/String;ILjava/lang/String;Z&quot;, &quot;str1&quot;, 5, &quot;str3&quot;, 0x5 &lt;&lt; 1);<br>

<br> 0(1392) ERROR: app_java [java_iface.c:81]: java_exec(): method_name=&#39;test&#39;, signature=&#39;Ljava/lang/String;ILjava/lang/String;Z&#39;, params: &#39;str1&#39;, &#39;5&#39;, &#39;str3&#39;, &#39;10&#39;, &#39;(null)&#39;<br>

<br>----------------------------------<br>Creating a new function java_exec2 with int param:<br>exported function:     { &quot;java_exec2&quot;, (cmd_function)java_exec2, 2,   NULL, 0,     ANY_ROUTE },<br>prototype: int java_exec2(struct sip_msg *msg, char *method_name, int param);<br>

<br> java_exec2(&quot;test&quot;, 5);<br><br> 0(1690) ERROR: app_java [java_mod.c:56]: java_exec2(): method_name=&#39;test&#39;, params: &#39;-1252293208&#39;<br><br> changing prototype to: int java_exec2(struct sip_msg *msg, char *method_name, void *param);<br>

 and trying to cast to (char*):<br><br> 0(1867) ERROR: app_java [java_mod.c:56]: java_exec2(): method_name=&#39;test&#39;, params: &#39;5&#39;<br><br> so, the params are being forcibly cast to (char *) ? Why the params aren&#39;t void pointers ?<br>

<br>-------------------------------------------<br><br><br><br>