<div>in the function&nbsp;switch_stun_random_string, there are two bugs.</div>
<div>1. the 2nd parameter len is uint16_t type, while the local varible x is uint8_t type. If sometimes len is larger than 0xFF, the for loop will be&nbsp;infinite loop.</div>
<div>2.&nbsp;anyway, after this function, there would be no&nbsp;&quot;a&quot; in the buf.</div>
<div>Please see the changes as followed.</div>
<div>&nbsp;</div>
<div>Index: freeswitch/src/switch_stun.c<br>===================================================================<br>--- freeswitch/src/switch_stun.c&nbsp;(revision 0)<br>+++ freeswitch/src/switch_stun.c&nbsp;(working copy)<br>@@ -91,18 +91,18 @@
<br>&nbsp;{<br>&nbsp;&nbsp;char chars[] = &quot;abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789&quot;;<br>&nbsp;&nbsp;int max;<br>-&nbsp;uint8_t x;<br>+&nbsp;uint16_t x;<br>&nbsp;<br>&nbsp;&nbsp;if (!set) {<br>&nbsp;&nbsp;&nbsp;set = chars;<br>&nbsp;&nbsp;}<br>&nbsp;<br>-&nbsp;max = (int)strlen(set) - 1;
<br>+&nbsp;max = (int)strlen(set);<br>&nbsp;<br>&nbsp;&nbsp;srand((unsigned int)apr_time_now());<br>&nbsp;<br>&nbsp;&nbsp;for(x = 0; x &lt; len; x++) {<br>-&nbsp;&nbsp;int j = 1+(int)(max*1.0*rand()/(RAND_MAX+1.0));<br>+&nbsp;&nbsp;int j = (int)(max*1.0*rand()/(RAND_MAX+1.0));
<br>&nbsp;&nbsp;&nbsp;buf[x] = set[j];<br>&nbsp;&nbsp;}<br>&nbsp;}<br>&nbsp;</div>