[Asterisk-Dev] fun with valgrind

Matthew Boehm mboehm at cytelcom.com
Tue May 10 08:09:26 MST 2005


I was advised to use 'valgrind' to help debug a module addon I'm making.

Before I even get to that part, valgrind gave me lots of other interesting
errors/messages with asterisk. Most of the errors are "conditional jump on
non-initialized variable" or something of that nature.

This one caught my eye:

==16731==
==16731== Source and destination overlap in strncpy(0x1BD68B26, 0x1BD68B27,
374)
==16731==    at 0x1B904756: strncpy (mac_replace_strmem.c:113)
==16731==    by 0x1C1986B2: ??? (app_voicemail.c:5545)
==16731==    by 0x1C195D46: load_module (app_voicemail.c:5600)
==16731==    by 0x1BA2A916: __libc_start_main (in /lib/libc-2.3.2.so)
==16731==    by 0x805405C: ??? (start.S:81)
==16731==
==16731== Source and destination overlap in strncpy(0x1BD68B24, 0x1BD68B25,
370)
==16731==    at 0x1B904756: strncpy (mac_replace_strmem.c:113)
==16731==    by 0x1C198675: ??? (app_voicemail.c:5549)
==16731==    by 0x1C195D46: load_module (app_voicemail.c:5600)
==16731==    by 0x1BA2A916: __libc_start_main (in /lib/libc-2.3.2.so)
==16731==    by 0x805405C: ??? (start.S:81)

So I looked at the code in question. It revolves around parsing the body
email for voicemail notifications.

/* substitute strings \t and \n into the apropriate characters */
tmpread = tmpwrite = emailbody;
while ((tmpwrite = strchr(tmpread,'\\'))) {
    int len = strlen("\n");
    switch (tmpwrite[1]) {
        case 'n':
            strncpy(tmpwrite+len,tmpwrite+2,strlen(tmpwrite+2)+1); <=== line
5545
            strncpy(tmpwrite,"\n",len);
            break;
        case 't':
            strncpy(tmpwrite+len,tmpwrite+2,strlen(tmpwrite+2)+1); <=== line
5549
            strncpy(tmpwrite,"\t",len);
            break;
        default:
            ast_log(LOG_NOTICE, "Substitution routine does not support this
character: %c\n",tmpwrite[1]);
    }
    tmpread = tmpwrite+len;
}

Could somebody explain what is going on there? It seems as if the code is
replacing "\n" with "\n" and "\t" with "\t".

-Matthew

-- 
------------------------------------------------------------------------
Matthew Boehm, IT Director                    Cypress Telecommunications
mboehm at cytelcom.com                   3838 N. Sam Houston Parkway E #400
T: 832-200-8640 x3044                                  Houston, TX 77032

My girlfriend was recently diagnosed with multiple personality disorder;
 When she called yesterday, my CallerID box exploded.
------------------------------------------------------------------------




More information about the asterisk-dev mailing list