libpurple/protocols/msn/directconn.c

changeset 35676
d9fdd45925ec
parent 34889
4ea2da14cd0e
child 36257
c5445f25f90f
--- a/libpurple/protocols/msn/directconn.c	Mon Mar 31 23:58:05 2014 +0200
+++ b/libpurple/protocols/msn/directconn.c	Thu Apr 03 00:47:13 2014 +0200
@@ -84,12 +84,13 @@
 static void
 msn_dc_generate_nonce(MsnDirectConn *dc)
 {
-	guint32 *nonce;
 	int i;
 
-	nonce = (guint32 *)&dc->nonce;
-	for (i = 0; i < 4; i++)
-		nonce[i] = rand();
+	for (i = 0; i < 4; i++) {
+		guint32 randval = g_random_int();
+		memcpy(dc->nonce + sizeof(guint32) * i,
+			&randval, sizeof(guint32));
+	}
 
 	msn_dc_calculate_nonce_hash(dc->nonce_type, dc->nonce, sizeof(dc->nonce), dc->nonce_hash);
 
@@ -661,7 +662,8 @@
 
 	/* Wait for packet length */
 	while (dc->in_pos >= 4) {
-		packet_length = GUINT32_FROM_LE(*((guint32*)dc->in_buffer));
+		memcpy(&packet_length, dc->in_buffer, sizeof(packet_length));
+		packet_length = GUINT32_FROM_LE(packet_length);
 
 		if (packet_length > DC_MAX_PACKET_SIZE) {
 			/* Oversized packet */

mercurial