When registering a soft client running on my Android phone (Grandstream Wave), Kamailio crashes every time when the client registers. When setting the debug level below 3 Kamailio does not crash. I have only found the problem with this SIP client. Others are working fine.
Set debug level greather than 2 and register the Grandstream Wave soft client from an Android phone. Kamailio then crashes.
just before crashing I get the following message:
0(7819) ERROR: [core/udp_server.c:484]: udp_rcv_loop(): print buffer building failed (10/16/4)
The problem seems to come from non-printable characters sent by the SIP client causing Kamailio to crash.
Changing line 482 in udp_server.c from
l = snprintf(printbuf+j, 6, " %02X ", buf[i]);
to
l = snprintf(printbuf+j, 6, " %02X ", (unsigned char)buf[i]);
fixes the problem.
The compiler treats buf[i] as a signed integer and prepends 'FFFFFF' to the string making it longer than 6 characters. Casting buf[i] as an unsigned char prevents Kamailio from crashing.
kamailio -v
version: kamailio 5.1.0 (x86_64/linux)
flags: STATS: Off, USE_TCP, USE_TLS, USE_SCTP, TLS_HOOKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC, Q_MALLOC, F_MALLOC, TLSF_MALLOC, DBG_SR_MEMORY, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES
ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16, MAX_URI_SIZE 1024, BUF_SIZE 65535, DEFAULT PKG_SIZE 8MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
id: unknown
compiled with gcc 5.3.1
Ubuntu 16.04 (Xenial)
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.