From 760a71e348754c085b484b3c98910dc83092d886 Mon Sep 17 00:00:00 2001 From: Jakub Adam Date: Wed, 29 Jun 2011 13:38:54 +0200 Subject: [PATCH] filetransfer: Handle messages with wrong callid When such filetransfer message is received, reply with 481 "Call Leg/Transaction Does Not Exist" as MSOC does. Fixes segfault because of NULL session pointed out by Jochen De Smet: https://sourceforge.net/projects/sipe/forums/forum/688535/topic/4589023 --- src/core/sipe-incoming.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/core/sipe-incoming.c b/src/core/sipe-incoming.c index 5d538bdc..1f100f28 100644 --- a/src/core/sipe-incoming.c +++ b/src/core/sipe-incoming.c @@ -688,12 +688,18 @@ void process_incoming_message(struct sipe_core_private *sipe_private, struct sip_session *session = sipe_session_find_chat_or_im(sipe_private, callid, from); - struct sip_dialog *dialog = sipe_dialog_find(session, from); - GSList *body = sipe_ft_parse_msg_body(msg->body); - found = sipe_process_incoming_x_msmsgsinvite(sipe_private, dialog, body); - sipe_utils_nameval_free(body); - if (found) { - sip_transport_response(sipe_private, msg, 200, "OK", NULL); + if (session) { + struct sip_dialog *dialog = sipe_dialog_find(session, from); + GSList *body = sipe_ft_parse_msg_body(msg->body); + found = sipe_process_incoming_x_msmsgsinvite(sipe_private, dialog, body); + sipe_utils_nameval_free(body); + if (found) { + sip_transport_response(sipe_private, msg, 200, "OK", NULL); + } + } else { + sip_transport_response(sipe_private, msg, 481, + "Call Leg/Transaction Does Not Exist", NULL); + found = TRUE; } } if (!found) { -- 2.11.4.GIT