1From 51c95a23bff3a024dc19e3127ca751e1458be0f0 Mon Sep 17 00:00:00 2001
2From: Khem Raj <raj.khem@gmail.com>
3Date: Mon, 5 Apr 2021 11:36:50 -0700
4Subject: [PATCH] Migrate to use g_memdup2
5
6g_memdup has been deprecated for long and latest glib-2.0 2.68+ has
7turned it int an error to use old function.
8
9The fall-back to g_memdup isn't needed because pidgin provides g_memdup2
10in pidgin-sipe/1.25.0-r0/recipe-sysroot/usr/include/libpurple/glibcompat.h
11based on glib-2.0 version:
12  /* Backport the static inline version of g_memdup2 if we don't have g_memdup2.
13   * see https://mail.gnome.org/archives/desktop-devel-list/2021-February/msg00000.html
14   * for more information.
15   */
16  #if !GLIB_CHECK_VERSION(2, 67, 3)
17  static inline gpointer
18  g_memdup2(gconstpointer mem, gsize byte_size) {
19          gpointer new_mem = NULL;
20
21          if(mem && byte_size != 0) {
22                  new_mem = g_malloc (byte_size);
23                  memcpy (new_mem, mem, byte_size);
24          }
25
26          return new_mem;
27  }
28  #endif /* !GLIB_CHECK_VERSION(2, 67, 3) */
29
30Upstream-Status: Pending
31Signed-off-by: Khem Raj <raj.khem@gmail.com>
32---
33 src/api/sipe-common.h              |  3 +++
34 src/core/sip-sec-gssapi.c          |  4 ++--
35 src/core/sip-sec-ntlm.c            | 12 ++++++------
36 src/core/sip-sec-tls-dsk.c         |  4 ++--
37 src/core/sipe-media.c              |  2 +-
38 src/core/sipe-tls-tester.c         |  2 +-
39 src/core/sipe-tls.c                |  4 ++--
40 src/telepathy/telepathy-protocol.c |  2 +-
41 8 files changed, 18 insertions(+), 15 deletions(-)
42
43diff --git a/src/api/sipe-common.h b/src/api/sipe-common.h
44index c964f15..cab81e0 100644
45--- a/src/api/sipe-common.h
46+++ b/src/api/sipe-common.h
47@@ -51,3 +51,6 @@
48 #ifdef _MSC_VER
49 typedef long ssize_t;
50 #endif
51+
52+// for g_memdup2
53+#include <libpurple/glibcompat.h>
54diff --git a/src/core/sip-sec-gssapi.c b/src/core/sip-sec-gssapi.c
55index 873080f..4c63868 100644
56--- a/src/core/sip-sec-gssapi.c
57+++ b/src/core/sip-sec-gssapi.c
58@@ -602,7 +602,7 @@ sip_sec_init_sec_context__gssapi(SipSecContext context,
59
60 	out_buff->length = output_token.length;
61 	if (out_buff->length)
62-		out_buff->value = g_memdup(output_token.value, output_token.length);
63+		out_buff->value = g_memdup2(output_token.value, output_token.length);
64 	else
65 		/* Special case: empty token */
66 		out_buff->value = (guint8 *) g_strdup("");
67@@ -653,7 +653,7 @@ sip_sec_make_signature__gssapi(SipSecContext context,
68 		return FALSE;
69 	} else {
70 		signature->length = output_token.length;
71-		signature->value  = g_memdup(output_token.value,
72+		signature->value  = g_memdup2(output_token.value,
73 					     output_token.length);
74 		gss_release_buffer(&minor, &output_token);
75 		return TRUE;
76diff --git a/src/core/sip-sec-ntlm.c b/src/core/sip-sec-ntlm.c
77index 2e2354f..1fa4daa 100644
78--- a/src/core/sip-sec-ntlm.c
79+++ b/src/core/sip-sec-ntlm.c
80@@ -951,7 +951,7 @@ sip_sec_ntlm_parse_challenge(SipSecBuffer in_buff,
81
82 	/* server challenge (nonce) */
83 	if (server_challenge) {
84-		*server_challenge = g_memdup(cmsg->nonce, 8);
85+		*server_challenge = g_memdup2(cmsg->nonce, 8);
86 	}
87
88 	/* flags */
89@@ -984,7 +984,7 @@ sip_sec_ntlm_parse_challenge(SipSecBuffer in_buff,
90 			*target_info_len = len;
91 		}
92 		if (target_info) {
93-			*target_info = g_memdup(content, len);
94+			*target_info = g_memdup2(content, len);
95 		}
96 	}
97 }
98@@ -1117,13 +1117,13 @@ sip_sec_ntlm_gen_authenticate(guchar **client_sign_key,
99 		   Set ServerSigningKey to SIGNKEY(ExportedSessionKey, "Server")
100 		*/
101 		SIGNKEY(exported_session_key, TRUE, key);
102-		*client_sign_key = g_memdup(key, 16);
103+		*client_sign_key = g_memdup2(key, 16);
104 		SIGNKEY(exported_session_key, FALSE, key);
105-		*server_sign_key = g_memdup(key, 16);
106+		*server_sign_key = g_memdup2(key, 16);
107 		SEALKEY(neg_flags, exported_session_key, TRUE, key);
108-		*client_seal_key = g_memdup(key, 16);
109+		*client_seal_key = g_memdup2(key, 16);
110 		SEALKEY(neg_flags, exported_session_key, FALSE, key);
111-		*server_seal_key = g_memdup(key, 16);
112+		*server_seal_key = g_memdup2(key, 16);
113 	}
114
115 	/* @TODO: */
116diff --git a/src/core/sip-sec-tls-dsk.c b/src/core/sip-sec-tls-dsk.c
117index 70433ea..2d3f2db 100644
118--- a/src/core/sip-sec-tls-dsk.c
119+++ b/src/core/sip-sec-tls-dsk.c
120@@ -88,9 +88,9 @@ sip_sec_init_sec_context__tls_dsk(SipSecContext context,
121 			/* copy key pair */
122 			ctx->algorithm  = state->algorithm;
123 			ctx->key_length = state->key_length;
124-			ctx->client_key = g_memdup(state->client_key,
125+			ctx->client_key = g_memdup2(state->client_key,
126 						   state->key_length);
127-			ctx->server_key = g_memdup(state->server_key,
128+			ctx->server_key = g_memdup2(state->server_key,
129 						   state->key_length);
130
131 			/* extract certicate expiration time */
132diff --git a/src/core/sipe-media.c b/src/core/sipe-media.c
133index e9c4b8a..936e31c 100644
134--- a/src/core/sipe-media.c
135+++ b/src/core/sipe-media.c
136@@ -578,7 +578,7 @@ media_stream_to_sdpmedia(struct sipe_media_call_private *call_private,
137 	// Set our key if encryption is enabled.
138 	if (stream_private->encryption_key &&
139 	    encryption_policy != SIPE_ENCRYPTION_POLICY_REJECTED) {
140-		sdpmedia->encryption_key = g_memdup(stream_private->encryption_key,
141+		sdpmedia->encryption_key = g_memdup2(stream_private->encryption_key,
142 						    SIPE_SRTP_KEY_LEN);
143 		sdpmedia->encryption_key_id = stream_private->encryption_key_id;
144 	}
145diff --git a/src/core/sipe-tls-tester.c b/src/core/sipe-tls-tester.c
146index e80d715..5fbb5f8 100644
147--- a/src/core/sipe-tls-tester.c
148+++ b/src/core/sipe-tls-tester.c
149@@ -155,7 +155,7 @@ static guchar *read_tls_record(int fd,
150 		printf("received %d bytes from server\n", result);
151 		record = g_new0(struct record, 1);
152 		record->length  = result;
153-		record->msg     = g_memdup(buffer, result);
154+		record->msg     = g_memdup2(buffer, result);
155 		length         += result;
156 		fragments = g_slist_append(fragments, record);
157 	}
158diff --git a/src/core/sipe-tls.c b/src/core/sipe-tls.c
159index b0235d5..020aedb 100644
160--- a/src/core/sipe-tls.c
161+++ b/src/core/sipe-tls.c
162@@ -427,7 +427,7 @@ static guchar *sipe_tls_prf(SIPE_UNUSED_PARAMETER struct tls_internal_state *sta
163 	gsize half           = (secret_length + 1) / 2;
164 	gsize newseed_length = label_length + seed_length;
165 	/* secret: used as S1; secret2: last half of original secret (S2) */
166-	guchar *secret2 = g_memdup(secret + secret_length - half, half);
167+	guchar *secret2 = g_memdup2(secret + secret_length - half, half);
168 	guchar *newseed = g_malloc(newseed_length);
169 	guchar *md5, *dest;
170 	guchar *sha1, *src;
171@@ -1525,7 +1525,7 @@ static struct tls_compiled_message *tls_client_key_exchange(struct tls_internal_
172
173 	/* found all the required fields */
174 	state->server_random.length = server_random->length;
175-	state->server_random.buffer = g_memdup(server_random->data,
176+	state->server_random.buffer = g_memdup2(server_random->data,
177 					       server_random->length);
178 	tls_calculate_secrets(state);
179
180diff --git a/src/telepathy/telepathy-protocol.c b/src/telepathy/telepathy-protocol.c
181index f6e5337..1dde579 100644
182--- a/src/telepathy/telepathy-protocol.c
183+++ b/src/telepathy/telepathy-protocol.c
184@@ -237,7 +237,7 @@ static void get_connection_details(SIPE_UNUSED_PARAMETER TpBaseProtocol *self,
185 			SIPE_TYPE_SEARCH_MANAGER,
186 			G_TYPE_INVALID
187 		};
188-		*channel_managers = g_memdup(types, sizeof(types));
189+		*channel_managers = g_memdup2(types, sizeof(types));
190 	}
191 	if (icon_name)
192 		*icon_name    = g_strdup("im-" SIPE_TELEPATHY_DOMAIN);
193