summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2013-06-09 16:19:19 +0200
committerHarald Welte <laforge@gnumonks.org>2013-06-09 16:19:58 +0200
commit0a00ca8a203a2e1ba7fa1e2d14dc6530c22d61cd (patch)
tree650f0148947b38b7e2e348adf41bec3189229d3f
parent0afe128c2006047519f64de8597252e0e55e6d63 (diff)
DHA: make extract_dialogue_portion() safe for asn1_NOVALUE
-rw-r--r--TCAP/src/ITU/tcap_dha_fsm.erl18
1 files 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?!?