[Asterisk-cvs] asterisk enum.c,1.20,1.20.2.1

russell at lists.digium.com russell at lists.digium.com
Wed Mar 16 18:23:56 CST 2005


Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv27398

Modified Files:
      Tag: v1-0
	enum.c 
Log Message:
fix TXTCIDName (bug #3681)


Index: enum.c
===================================================================
RCS file: /usr/cvsroot/asterisk/enum.c,v
retrieving revision 1.20
retrieving revision 1.20.2.1
diff -u -d -r1.20 -r1.20.2.1
--- enum.c	14 Jul 2004 07:44:19 -0000	1.20
+++ enum.c	17 Mar 2005 00:19:23 -0000	1.20.2.1
@@ -244,16 +244,31 @@
 	printf("ENUMTXT Called\n");
 #endif
 
-	if (answer != NULL) {
-		c->txtlen = strlen(answer);
-		strncpy(c->txt, answer, sizeof(c->txt) - 1);
-		c->txt[sizeof(c->txt) - 1] = 0;
-		return 1;
-	} else {
+	if (answer == NULL) {
 		c->txt = NULL;
 		c->txtlen = 0;
 		return 0;
 	}
+
+	/* 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] = '\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] = '\0';
+
+	return 1;
 }
 
 static int enum_callback(void *context, u_char *answer, int len, u_char *fullanswer)




More information about the svn-commits mailing list