1f7e853
From 567d0ddc0692adfef5f15d0d383825a9b2ea4b49 Mon Sep 17 00:00:00 2001
1f7e853
From: Stefan Becker <chemobejk@gmail.com>
1f7e853
Date: Thu, 25 Mar 2021 16:54:18 +0200
1f7e853
Subject: [PATCH 1/3] utils: add sipe_utils_memdup()
1f7e853
1f7e853
Glib >= 2.68 deprecates g_memdup(). Add a simple wrapper that calls
1f7e853
g_memedup2() instead.
1f7e853
---
1f7e853
 src/core/sipe-utils.c | 13 ++++++++++++-
1f7e853
 src/core/sipe-utils.h | 10 +++++++++-
1f7e853
 2 files changed, 21 insertions(+), 2 deletions(-)
1f7e853
1f7e853
diff --git a/src/core/sipe-utils.c b/src/core/sipe-utils.c
1f7e853
index 12ff8d68..3a27e3c6 100644
1f7e853
--- a/src/core/sipe-utils.c
1f7e853
+++ b/src/core/sipe-utils.c
1f7e853
@@ -3,7 +3,7 @@
1f7e853
  *
1f7e853
  * pidgin-sipe
1f7e853
  *
1f7e853
- * Copyright (C) 2009-2019 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
+ * Copyright (C) 2009-2021 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
  *
1f7e853
  * This program is free software; you can redistribute it and/or modify
1f7e853
  * it under the terms of the GNU General Public License as published by
1f7e853
@@ -277,6 +277,17 @@ is_empty(const char *st)
1f7e853
 	return FALSE;
1f7e853
 }
1f7e853
 
1f7e853
+gpointer sipe_utils_memdup(gconstpointer mem, guint byte_size)
1f7e853
+{
1f7e853
+	return
1f7e853
+#if GLIB_CHECK_VERSION(2,68,0)
1f7e853
+		g_memdup2
1f7e853
+#else
1f7e853
+		g_memdup
1f7e853
+#endif
1f7e853
+		(mem, byte_size);
1f7e853
+}
1f7e853
+
1f7e853
 void sipe_utils_message_debug(struct sipe_transport_connection *conn,
1f7e853
 			      const gchar *type,
1f7e853
 			      const gchar *header,
1f7e853
diff --git a/src/core/sipe-utils.h b/src/core/sipe-utils.h
1f7e853
index 0d408bf6..33dd1184 100644
1f7e853
--- a/src/core/sipe-utils.h
1f7e853
+++ b/src/core/sipe-utils.h
1f7e853
@@ -3,7 +3,7 @@
1f7e853
  *
1f7e853
  * pidgin-sipe
1f7e853
  *
1f7e853
- * Copyright (C) 2009-2019 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
+ * Copyright (C) 2009-2021 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
  *
1f7e853
  * This program is free software; you can redistribute it and/or modify
1f7e853
  * it under the terms of the GNU General Public License as published by
1f7e853
@@ -235,6 +235,14 @@ sipe_is_bad_alias(const char *uri,
1f7e853
 gboolean
1f7e853
 is_empty(const char *st);
1f7e853
 
1f7e853
+/**
1f7e853
+ * Wrapper to hide differences between g_memdup()/g_memdup2()
1f7e853
+ *
1f7e853
+ * @param mem       pointer to memory to duplicate
1f7e853
+ * @param byte_size length of memory to duplicate
1f7e853
+ */
1f7e853
+gpointer sipe_utils_memdup(gconstpointer mem, guint byte_size);
1f7e853
+
1f7e853
 /**
1f7e853
  * Message debugging
1f7e853
  *
1f7e853
-- 
1f7e853
2.30.2
1f7e853
1f7e853
From 583a734e63833f03d11798b7b0d59a17d08ae60f Mon Sep 17 00:00:00 2001
1f7e853
From: Stefan Becker <chemobejk@gmail.com>
1f7e853
Date: Thu, 25 Mar 2021 16:56:05 +0200
1f7e853
Subject: [PATCH 2/3] core: replace g_memdup() with sipe_utils_memdup()
1f7e853
1f7e853
---
1f7e853
 src/core/sip-sec-gssapi.c  |  8 ++++----
1f7e853
 src/core/sip-sec-ntlm.c    | 14 +++++++-------
1f7e853
 src/core/sip-sec-tls-dsk.c | 11 ++++++-----
1f7e853
 src/core/sipe-media.c      |  6 +++---
1f7e853
 src/core/sipe-tls-tester.c | 16 ++++++++++++++--
1f7e853
 src/core/sipe-tls.c        | 11 +++++++----
1f7e853
 6 files changed, 41 insertions(+), 25 deletions(-)
1f7e853
1f7e853
diff --git a/src/core/sip-sec-gssapi.c b/src/core/sip-sec-gssapi.c
1f7e853
index 873080f8..fedc6b9d 100644
1f7e853
--- a/src/core/sip-sec-gssapi.c
1f7e853
+++ b/src/core/sip-sec-gssapi.c
1f7e853
@@ -3,7 +3,7 @@
1f7e853
  *
1f7e853
  * pidgin-sipe
1f7e853
  *
1f7e853
- * Copyright (C) 2010-2019 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
+ * Copyright (C) 2010-2021 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
  * Copyright (C) 2009 pier11 <pier11@operamail.com>
1f7e853
  *
1f7e853
  *
1f7e853
@@ -602,7 +602,7 @@ sip_sec_init_sec_context__gssapi(SipSecContext context,
1f7e853
 
1f7e853
 	out_buff->length = output_token.length;
1f7e853
 	if (out_buff->length)
1f7e853
-		out_buff->value = g_memdup(output_token.value, output_token.length);
1f7e853
+		out_buff->value = sipe_utils_memdup(output_token.value, output_token.length);
1f7e853
 	else
1f7e853
 		/* Special case: empty token */
1f7e853
 		out_buff->value = (guint8 *) g_strdup("");
1f7e853
@@ -653,8 +653,8 @@ sip_sec_make_signature__gssapi(SipSecContext context,
1f7e853
 		return FALSE;
1f7e853
 	} else {
1f7e853
 		signature->length = output_token.length;
1f7e853
-		signature->value  = g_memdup(output_token.value,
1f7e853
-					     output_token.length);
1f7e853
+		signature->value  = sipe_utils_memdup(output_token.value,
1f7e853
+						      output_token.length);
1f7e853
 		gss_release_buffer(&minor, &output_token);
1f7e853
 		return TRUE;
1f7e853
 	}
1f7e853
diff --git a/src/core/sip-sec-ntlm.c b/src/core/sip-sec-ntlm.c
1f7e853
index 2e2354f8..ef896bfe 100644
1f7e853
--- a/src/core/sip-sec-ntlm.c
1f7e853
+++ b/src/core/sip-sec-ntlm.c
1f7e853
@@ -3,7 +3,7 @@
1f7e853
  *
1f7e853
  * pidgin-sipe
1f7e853
  *
1f7e853
- * Copyright (C) 2010-2019 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
+ * Copyright (C) 2010-2021 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
  * Copyright (C) 2009, 2010 pier11 <pier11@operamail.com>
1f7e853
  * Copyright (C) 2008 Novell, Inc.
1f7e853
  * Modify        2007, Anibal Avelar <avelar@gmail.com>
1f7e853
@@ -951,7 +951,7 @@ sip_sec_ntlm_parse_challenge(SipSecBuffer in_buff,
1f7e853
 
1f7e853
 	/* server challenge (nonce) */
1f7e853
 	if (server_challenge) {
1f7e853
-		*server_challenge = g_memdup(cmsg->nonce, 8);
1f7e853
+		*server_challenge = sipe_utils_memdup(cmsg->nonce, 8);
1f7e853
 	}
1f7e853
 
1f7e853
 	/* flags */
1f7e853
@@ -984,7 +984,7 @@ sip_sec_ntlm_parse_challenge(SipSecBuffer in_buff,
1f7e853
 			*target_info_len = len;
1f7e853
 		}
1f7e853
 		if (target_info) {
1f7e853
-			*target_info = g_memdup(content, len);
1f7e853
+			*target_info = sipe_utils_memdup(content, len);
1f7e853
 		}
1f7e853
 	}
1f7e853
 }
1f7e853
@@ -1117,13 +1117,13 @@ sip_sec_ntlm_gen_authenticate(guchar **client_sign_key,
1f7e853
 		   Set ServerSigningKey to SIGNKEY(ExportedSessionKey, "Server")
1f7e853
 		*/
1f7e853
 		SIGNKEY(exported_session_key, TRUE, key);
1f7e853
-		*client_sign_key = g_memdup(key, 16);
1f7e853
+		*client_sign_key = sipe_utils_memdup(key, 16);
1f7e853
 		SIGNKEY(exported_session_key, FALSE, key);
1f7e853
-		*server_sign_key = g_memdup(key, 16);
1f7e853
+		*server_sign_key = sipe_utils_memdup(key, 16);
1f7e853
 		SEALKEY(neg_flags, exported_session_key, TRUE, key);
1f7e853
-		*client_seal_key = g_memdup(key, 16);
1f7e853
+		*client_seal_key = sipe_utils_memdup(key, 16);
1f7e853
 		SEALKEY(neg_flags, exported_session_key, FALSE, key);
1f7e853
-		*server_seal_key = g_memdup(key, 16);
1f7e853
+		*server_seal_key = sipe_utils_memdup(key, 16);
1f7e853
 	}
1f7e853
 
1f7e853
 	/* @TODO: */
1f7e853
diff --git a/src/core/sip-sec-tls-dsk.c b/src/core/sip-sec-tls-dsk.c
1f7e853
index 70433eae..7f23f2c8 100644
1f7e853
--- a/src/core/sip-sec-tls-dsk.c
1f7e853
+++ b/src/core/sip-sec-tls-dsk.c
1f7e853
@@ -3,7 +3,7 @@
1f7e853
  *
1f7e853
  * pidgin-sipe
1f7e853
  *
1f7e853
- * Copyright (C) 2011-2015 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
+ * Copyright (C) 2011-2021 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
  *
1f7e853
  *
1f7e853
  * This program is free software; you can redistribute it and/or modify
1f7e853
@@ -44,6 +44,7 @@
1f7e853
 #include "sipe-backend.h"
1f7e853
 #include "sipe-digest.h"
1f7e853
 #include "sipe-tls.h"
1f7e853
+#include "sipe-utils.h"
1f7e853
 
1f7e853
 /* Security context for TLS-DSK */
1f7e853
 typedef struct _context_tls_dsk {
1f7e853
@@ -88,10 +89,10 @@ sip_sec_init_sec_context__tls_dsk(SipSecContext context,
1f7e853
 			/* copy key pair */
1f7e853
 			ctx->algorithm  = state->algorithm;
1f7e853
 			ctx->key_length = state->key_length;
1f7e853
-			ctx->client_key = g_memdup(state->client_key,
1f7e853
-						   state->key_length);
1f7e853
-			ctx->server_key = g_memdup(state->server_key,
1f7e853
-						   state->key_length);
1f7e853
+			ctx->client_key = sipe_utils_memdup(state->client_key,
1f7e853
+							    state->key_length);
1f7e853
+			ctx->server_key = sipe_utils_memdup(state->server_key,
1f7e853
+							    state->key_length);
1f7e853
 
1f7e853
 			/* extract certicate expiration time */
1f7e853
 			ctx->common.expires = sipe_tls_expires(state);
1f7e853
diff --git a/src/core/sipe-media.c b/src/core/sipe-media.c
1f7e853
index e9c4b8a8..8b05d67e 100644
1f7e853
--- a/src/core/sipe-media.c
1f7e853
+++ b/src/core/sipe-media.c
1f7e853
@@ -3,7 +3,7 @@
1f7e853
  *
1f7e853
  * pidgin-sipe
1f7e853
  *
1f7e853
- * Copyright (C) 2011-2019 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
+ * Copyright (C) 2011-2021 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
  * Copyright (C) 2010 Jakub Adam <jakub.adam@ktknet.cz>
1f7e853
  *
1f7e853
  * This program is free software; you can redistribute it and/or modify
1f7e853
@@ -578,8 +578,8 @@ media_stream_to_sdpmedia(struct sipe_media_call_private *call_private,
1f7e853
 	// Set our key if encryption is enabled.
1f7e853
 	if (stream_private->encryption_key &&
1f7e853
 	    encryption_policy != SIPE_ENCRYPTION_POLICY_REJECTED) {
1f7e853
-		sdpmedia->encryption_key = g_memdup(stream_private->encryption_key,
1f7e853
-						    SIPE_SRTP_KEY_LEN);
1f7e853
+		sdpmedia->encryption_key = sipe_utils_memdup(stream_private->encryption_key,
1f7e853
+							     SIPE_SRTP_KEY_LEN);
1f7e853
 		sdpmedia->encryption_key_id = stream_private->encryption_key_id;
1f7e853
 	}
1f7e853
 
1f7e853
diff --git a/src/core/sipe-tls-tester.c b/src/core/sipe-tls-tester.c
1f7e853
index e80d7154..1cdb752d 100644
1f7e853
--- a/src/core/sipe-tls-tester.c
1f7e853
+++ b/src/core/sipe-tls-tester.c
1f7e853
@@ -3,7 +3,7 @@
1f7e853
  *
1f7e853
  * pidgin-sipe
1f7e853
  *
1f7e853
- * Copyright (C) 2011-2019 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
+ * Copyright (C) 2011-2021 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
  *
1f7e853
  *
1f7e853
  * This program is free software; you can redistribute it and/or modify
1f7e853
@@ -65,6 +65,7 @@
1f7e853
 #include "sipe-cert-crypto.h"
1f7e853
 #include "sipe-crypt.h"
1f7e853
 #include "sipe-tls.h"
1f7e853
+#include "sipe-utils.h"
1f7e853
 
1f7e853
 /*
1f7e853
  * Stubs
1f7e853
@@ -94,6 +95,17 @@ void sipe_backend_debug(sipe_debug_level level,
1f7e853
 	g_free(newformat);
1f7e853
 }
1f7e853
 
1f7e853
+gpointer sipe_utils_memdup(gconstpointer mem, guint byte_size)
1f7e853
+{
1f7e853
+	return
1f7e853
+#if GLIB_CHECK_VERSION(2,68,0)
1f7e853
+		g_memdup2
1f7e853
+#else
1f7e853
+		g_memdup
1f7e853
+#endif
1f7e853
+		(mem, byte_size);
1f7e853
+}
1f7e853
+
1f7e853
 /* needed when linking against NSS */
1f7e853
 void md4sum(const uint8_t *data, uint32_t length, uint8_t *digest);
1f7e853
 void md4sum(SIPE_UNUSED_PARAMETER const uint8_t *data,
1f7e853
@@ -155,7 +167,7 @@ static guchar *read_tls_record(int fd,
1f7e853
 		printf("received %d bytes from server\n", result);
1f7e853
 		record = g_new0(struct record, 1);
1f7e853
 		record->length  = result;
1f7e853
-		record->msg     = g_memdup(buffer, result);
1f7e853
+		record->msg     = sipe_utils_memdup(buffer, result);
1f7e853
 		length         += result;
1f7e853
 		fragments = g_slist_append(fragments, record);
1f7e853
 	}
1f7e853
diff --git a/src/core/sipe-tls.c b/src/core/sipe-tls.c
1f7e853
index b0235d50..57f45af5 100644
1f7e853
--- a/src/core/sipe-tls.c
1f7e853
+++ b/src/core/sipe-tls.c
1f7e853
@@ -3,7 +3,7 @@
1f7e853
  *
1f7e853
  * pidgin-sipe
1f7e853
  *
1f7e853
- * Copyright (C) 2011-2016 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
+ * Copyright (C) 2011-2021 SIPE Project <http://sipe.sourceforge.net/>
1f7e853
  *
1f7e853
  *
1f7e853
  * This program is free software; you can redistribute it and/or modify
1f7e853
@@ -47,6 +47,9 @@
1f7e853
 #include "sipe-digest.h"
1f7e853
 #include "sipe-svc.h"
1f7e853
 #include "sipe-tls.h"
1f7e853
+#ifndef _SIPE_COMPILING_ANALYZER
1f7e853
+#include "sipe-utils.h"
1f7e853
+#endif
1f7e853
 
1f7e853
 /*
1f7e853
  * Private part of TLS state tracking
1f7e853
@@ -427,7 +430,7 @@ static guchar *sipe_tls_prf(SIPE_UNUSED_PARAMETER struct tls_internal_state *sta
1f7e853
 	gsize half           = (secret_length + 1) / 2;
1f7e853
 	gsize newseed_length = label_length + seed_length;
1f7e853
 	/* secret: used as S1; secret2: last half of original secret (S2) */
1f7e853
-	guchar *secret2 = g_memdup(secret + secret_length - half, half);
1f7e853
+	guchar *secret2 = sipe_utils_memdup(secret + secret_length - half, half);
1f7e853
 	guchar *newseed = g_malloc(newseed_length);
1f7e853
 	guchar *md5, *dest;
1f7e853
 	guchar *sha1, *src;
1f7e853
@@ -1525,8 +1528,8 @@ static struct tls_compiled_message *tls_client_key_exchange(struct tls_internal_
1f7e853
 
1f7e853
 	/* found all the required fields */
1f7e853
 	state->server_random.length = server_random->length;
1f7e853
-	state->server_random.buffer = g_memdup(server_random->data,
1f7e853
-					       server_random->length);
1f7e853
+	state->server_random.buffer = sipe_utils_memdup(server_random->data,
1f7e853
+							server_random->length);
1f7e853
 	tls_calculate_secrets(state);
1f7e853
 
1f7e853
 	/* ClientKeyExchange */
1f7e853
-- 
1f7e853
2.30.2
1f7e853