From 0a00ca8a203a2e1ba7fa1e2d14dc6530c22d61cd Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Sun, 9 Jun 2013 16:19:19 +0200 Subject: [PATCH] DHA: make extract_dialogue_portion() safe for asn1_NOVALUE --- TCAP/src/ITU/tcap_dha_fsm.erl | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/TCAP/src/ITU/tcap_dha_fsm.erl b/TCAP/src/ITU/tcap_dha_fsm.erl index 02ee5a8..c74ac93 100644 --- a/TCAP/src/ITU/tcap_dha_fsm.erl +++ b/TCAP/src/ITU/tcap_dha_fsm.erl @@ -840,16 +840,22 @@ extract_begin_dialogue_portion(UserData) when is_record(UserData, 'TR-user-data' extract_begin_dialogue_portion(_DialoguePortion) -> #'TC-BEGIN'{}. -extract_dialogue_portion(UserData, undefined) when is_record(UserData, 'TR-user-data'), - UserData#'TR-user-data'.dialoguePortion /= undefined -> +% if AC is undefined and dialogue portion present -> abort +extract_dialogue_portion(UserData, undefined) when is_record(UserData, 'TR-user-data') and + (UserData#'TR-user-data'.dialoguePortion /= undefined) and + (UserData#'TR-user-data'.dialoguePortion /= asn1_NOVALUE) -> %% Dialogue portion included? (yes) AC mode set? (no) abort; -extract_dialogue_portion(UserData, _AppContextName) when not is_record(UserData, 'TR-user-data'), - UserData#'TR-user-data'.dialoguePortion == undefined -> +% if dialogue portion is not present but App context name is set -> abort +extract_dialogue_portion(UserData, _AppContextName) when not is_record(UserData, 'TR-user-data') or + (UserData#'TR-user-data'.dialoguePortion == undefined) or + (UserData#'TR-user-data'.dialoguePortion == asn1_NOVALUE) -> %% Dialogue portion included? (no) AC mode set? (yes) abort; -extract_dialogue_portion(UserData, _AppContextName) when is_record(UserData, 'TR-user-data'), - UserData#'TR-user-data'.dialoguePortion /= undefined -> +% if dialogue portion is present and AppContext name is set -> decode dialogue and proceed +extract_dialogue_portion(UserData, _AppContextName) when is_record(UserData, 'TR-user-data') and + (UserData#'TR-user-data'.dialoguePortion /= undefined) and + (UserData#'TR-user-data'.dialoguePortion /= asn1_NOVALUE) -> %% Extract dialogue portion %{'EXTERNAL', {syntax,{0,0,17,773,1,1,1}}, _, DlgPDU} = UserData#'TR-user-data'.dialoguePortion, % some implementations seem to be broken and not send the 'symtax' part?!?