diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 159e194f9eae4e9a88d6ad68d7335652e461881a..b13759e2101d40c7d7b1bdd19692c1c36ec0c4ce 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -9445,9 +9445,10 @@ static int set_address_from_contact(struct sip_pvt *pvt)
 	struct ast_hostent ahp;
 	int port;
 	char *host, *pt;
+	char contact_buf[256];
+	char contact2_buf[256];
 	char *contact, *contact2;
 
-
 	if (ast_test_flag(&pvt->flags[0], SIP_NAT_ROUTE)) {
 		/* NAT: Don't trust the contact field.  Just use what they came to us
 		   with. */
@@ -9455,10 +9456,12 @@ static int set_address_from_contact(struct sip_pvt *pvt)
 		return 0;
 	}
 
-
 	/* Work on a copy */
-	contact = ast_strdupa(pvt->fullcontact);
-	contact2 = ast_strdupa(pvt->fullcontact);
+	ast_copy_string(contact_buf, pvt->fullcontact, sizeof(contact_buf));
+	ast_copy_string(contact2_buf, pvt->fullcontact, sizeof(contact2_buf));
+	contact = contact_buf;
+	contact2 = contact2_buf;
+
 	/* We have only the part in <brackets> here so we just need to parse a SIP URI.*/
 
 	if (pvt->socket.type == SIP_TRANSPORT_TLS) {