stun: Explicitly avoid a memcpy() from NULL
authorPhilip Withnall <philip.withnall@collabora.co.uk>
Tue, 17 Dec 2013 09:54:01 +0000 (09:54 +0000)
committerOlivier Crête <olivier.crete@collabora.com>
Wed, 18 Dec 2013 22:50:58 +0000 (17:50 -0500)
If stun_message_append_bytes() is called through
stun_message_append_flag(), data will be NULL and len will be 0. This
will result in a memcpy(ptr, NULL, 0) call. This probably won’t do any
harm (since any reasonable memcpy() implementation will immediately
return if (len == 0)), but the standard allows for memcpy() to explode
if (data == NULL), regardless of the value of len.

In order to be conformant, and to shut up the scan-build static analysis
warning about it, only do the memcpy() if (len > 0).

stun/stunmessage.c

index e9a831c..874d3f1 100644 (file)
@@ -377,7 +377,9 @@ stun_message_append_bytes (StunMessage *msg, StunAttribute type,
   if (ptr == NULL)
     return STUN_MESSAGE_RETURN_NOT_ENOUGH_SPACE;
 
-  memcpy (ptr, data, len);
+  if (len > 0)
+    memcpy (ptr, data, len);
+
   return STUN_MESSAGE_RETURN_SUCCESS;
 }