aboutsummaryrefslogtreecommitdiffstats
path: root/lib/xmerl/src/xmerl.erl
diff options
context:
space:
mode:
authorMicael Karlberg <[email protected]>2013-11-13 17:20:31 +0100
committerMicael Karlberg <[email protected]>2013-11-13 17:20:31 +0100
commit8bcd32dfceec3b4381747046b82eec42487c7518 (patch)
treecca7f396b6b3bd98950e5fc7713dfc9988633b10 /lib/xmerl/src/xmerl.erl
parentdc6f086a0751677da8724df397a062ab154f34cb (diff)
parentb166476d2674c056ed5f737170074e71fbdc4bfd (diff)
downloadotp-8bcd32dfceec3b4381747046b82eec42487c7518.tar.gz
otp-8bcd32dfceec3b4381747046b82eec42487c7518.tar.bz2
otp-8bcd32dfceec3b4381747046b82eec42487c7518.zip
Merge branch 'bmk/snmp/handling_corrupt_atl_when_converting/r16/OTP-11453' into bmk/snmp/snmp425_integration
Conflicts: lib/snmp/src/misc/snmp_log.erl
Diffstat (limited to 'lib/xmerl/src/xmerl.erl')
-rw-r--r--lib/xmerl/src/xmerl.erl25
1 files changed, 12 insertions, 13 deletions
diff --git a/lib/xmerl/src/xmerl.erl b/lib/xmerl/src/xmerl.erl
index 3249094e78..01af183eef 100644
--- a/lib/xmerl/src/xmerl.erl
+++ b/lib/xmerl/src/xmerl.erl
@@ -303,18 +303,17 @@ apply_tag_cb(Ms, F, Args) ->
apply_cb(Ms, F, '#element#', Args).
apply_cb(Ms, F, Df, Args) ->
- apply_cb(Ms, F, Df, Args, Ms).
-
-apply_cb([M|Ms], F, Df, Args, Ms0) ->
- case catch apply(M, F, Args) of
- {'EXIT', {undef,[{M,F,_,_}|_]}} ->
- apply_cb(Ms, F, Df, Args, Ms0);
- {'EXIT', Reason} ->
- exit(Reason);
- Res ->
- Res
+ apply_cb(Ms, F, Df, Args, length(Args)).
+
+apply_cb(Ms, F, Df, Args, A) ->
+ apply_cb(Ms, F, Df, Args, A, Ms).
+
+apply_cb([M|Ms], F, Df, Args, A, Ms0) ->
+ case erlang:function_exported(M, F, A) of
+ true -> apply(M, F, Args);
+ false -> apply_cb(Ms, F, Df, Args, A, Ms0)
end;
-apply_cb([], Df, Df, Args, _Ms0) ->
+apply_cb([], Df, Df, Args, A, _Ms0) ->
exit({unknown_tag, {Df, Args}});
-apply_cb([], F, Df, Args, Ms0) ->
- apply_cb(Ms0, Df, Df, [F|Args]).
+apply_cb([], F, Df, Args, A, Ms0) ->
+ apply_cb(Ms0, Df, Df, [F|Args], A+1).