ccrtp-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Ccrtp-devel] segmentation fault


From: Michel de Boer
Subject: [Ccrtp-devel] segmentation fault
Date: Sat, 26 Nov 2005 21:46:10 +0100
User-agent: Mozilla Thunderbird 1.0.2 (X11/20050317)

Hi David, Federico,

I have been debugging a segmentation fault that only happened on
one machine. After a lot of debugging I found the cause. The
backtrace I get is:

#7  0x41161903 in strlen () from /lib/tls/libc.so.6
#8  0x401b59eb in ost::RTPApplication::findCNAME (this=0x0)
    at char_traits.h:143
#9  0x401b5c49 in RTPApplication (this=0x401c9d80, address@hidden)
    at source.cpp:161
#10 0x401b5d16 in ost::defaultApplication () at stl_alloc.h:652
#11 0x081ad0dc in t_twinkle_rtp_session (this=0x84bb668, address@hidden,
    port=5004) at twinkle_rtp_session.cpp:6
#12 0x081a0b1f in t_audio_session (this=0x83acd10, _session=0x84ae35c,
    address@hidden, _recv_port=5004, address@hidden,
    _dst_port=12668, _codec=139125596, _ptime=20) at basic_string.h:716

I found that this crash can happen for 2 reasons:

1) LOGNAME is not set
2) The hostname is not in /etc/hosts

In both cases ccrtp tries to use a NULL pointer.

Attached you find a patch that fixes the problem. I hope you will fix
this in the next release.

Best regards,
Michel
--- ccrtp-1.3.5/src/source.cpp  2005-01-24 16:14:55.000000000 +0100
+++ ccrtp-1.3.5-patched/src/source.cpp  2005-11-26 18:05:11.000000000 +0100
@@ -76,7 +76,7 @@
        //    customization of the environment.
        // Try both LOGNAME and USER env. var.
        const char *user = Process::getEnv("LOGNAME");
-       if ( !strcmp(user,"") )
+       if ( !user || !strcmp(user,"") )
                user = Process::getEnv("USER");
        if ( user )
                username = user;
@@ -231,9 +231,18 @@
        // build string address@hidden
        std::string username;
        findusername(username);
-       
+        
+       // First create an InetHostAddress object, otherwise the
+       // object will be destructed and the hostname corrupted.
+       InetHostAddress iha;
+       const char *p = iha.getHostname();
+
+       // Returned hostname can be NULL
+       std::string hname;
+       if (p) hname = p;
+
        setSDESItem(SDESItemTypeCNAME, 
-                   username + "@" + InetHostAddress().getHostname());
+                   username + "@" + hname);
 }
 
 #ifdef CCXX_NAMESPACES

reply via email to

[Prev in Thread] Current Thread [Next in Thread]