From e59480f4fe5f681ca2bd810c65455309c9138816 Mon Sep 17 00:00:00 2001 From: markster Date: Sat, 12 Mar 2005 06:56:22 +0000 Subject: Fix TXTCIDName app (bug #3681) git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5175 f38db490-d61c-443f-a65b-d21fe96a405b --- enum.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'enum.c') diff --git a/enum.c b/enum.c index 5d9b4c6fa..8ebc2a441 100755 --- a/enum.c +++ b/enum.c @@ -268,9 +268,25 @@ static int txt_callback(void *context, u_char *answer, int len, u_char *fullansw c->txtlen = 0; return 0; } - strncpy(c->txt, answer, sizeof(c->txt) - 1); - c->txt[sizeof(c->txt) - 1] = 0; /* Make sure the string is terminated */ - c->txtlen = strlen(c->txt); + + /* skip over first byte, as for some reason it's a vertical tab character */ + answer += 1; + len -= 1; + + /* answer is not null-terminated, but should be */ + /* this is safe to do, as answer has extra bytes on the end we can + safely overwrite with a null */ + answer[len] = (u_char)"\0"; + /* now increment len so that len includes the null, so that we can + compare apples to apples */ + len +=1; + + /* finally, copy the answer into c->txt */ + strncpy(c->txt, answer, len < c->txtlen ? len-1 : (c->txtlen)-1); + + /* just to be safe, let's make sure c->txt is null terminated */ + c->txt[(c->txtlen)-1] = (char)"\0"; + return 1; } -- cgit v1.2.3