[asterisk-commits] sgriepentrog: branch 11 r427874 - /branches/11/main/stun.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Fri Nov 14 09:46:34 CST 2014


Author: sgriepentrog
Date: Fri Nov 14 09:46:30 2014
New Revision: 427874

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=427874
Log:
stun: correct attribute string padding to match rfc

When sending the USERNAME attribute in an RTP STUN
response, the implementation in append_attr_string
passed the actual length, instead of padding it up
to a multiple of four bytes as required by the RFC
3489.  This change adds separate variables for the
string and padded attributed lengths, and performs
padding correctly.


Modified:
    branches/11/main/stun.c

Modified: branches/11/main/stun.c
URL: http://svnview.digium.com/svn/asterisk/branches/11/main/stun.c?view=diff&rev=427874&r1=427873&r2=427874
==============================================================================
--- branches/11/main/stun.c (original)
+++ branches/11/main/stun.c Fri Nov 14 09:46:30 2014
@@ -201,12 +201,15 @@
 /*! \brief append a string to an STUN message */
 static void append_attr_string(struct stun_attr **attr, int attrval, const char *s, int *len, int *left)
 {
-	int size = sizeof(**attr) + strlen(s);
+	int str_length = strlen(s);
+	int attr_length = str_length + ((~(str_length - 1)) & 0x3);
+	int size = sizeof(**attr) + attr_length;
 	if (*left > size) {
 		(*attr)->attr = htons(attrval);
-		(*attr)->len = htons(strlen(s));
-		memcpy((*attr)->value, s, strlen(s));
-		(*attr) = (struct stun_attr *)((*attr)->value + strlen(s));
+		(*attr)->len = htons(attr_length);
+		memcpy((*attr)->value, s, str_length);
+		memset((*attr)->value + str_length, 0, attr_length - str_length);
+		(*attr) = (struct stun_attr *)((*attr)->value + attr_length);
 		*len += size;
 		*left -= size;
 	}




More information about the asterisk-commits mailing list