aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLars Thorsen <[email protected]>2019-05-15 09:50:16 +0200
committerLars Thorsen <[email protected]>2019-05-15 12:54:39 +0200
commitf7ee340593a7e69eb37f9f52b903a19d65e6b22e (patch)
treef6374ca708cacd2fe39c94c356a9f0ccfcefa99c /lib
parent7fe7fa3dde556b5b92522f8279d465bb52baf1f6 (diff)
downloadotp-f7ee340593a7e69eb37f9f52b903a19d65e6b22e.tar.gz
otp-f7ee340593a7e69eb37f9f52b903a19d65e6b22e.tar.bz2
otp-f7ee340593a7e69eb37f9f52b903a19d65e6b22e.zip
[xmerl] Fix parse bug when checking the character encoding
The parser chrashed when an endmarker was missing when parsing attribute values during the character encoding check.
Diffstat (limited to 'lib')
-rw-r--r--lib/xmerl/src/xmerl_sax_parser.erl12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/xmerl/src/xmerl_sax_parser.erl b/lib/xmerl/src/xmerl_sax_parser.erl
index fe836fd8cd..2767d02552 100644
--- a/lib/xmerl/src/xmerl_sax_parser.erl
+++ b/lib/xmerl/src/xmerl_sax_parser.erl
@@ -369,8 +369,8 @@ parse_eq(_, State) ->
%%----------------------------------------------------------------------
parse_value(<<C, Rest/binary>>, State) when ?is_whitespace(C) ->
parse_value(Rest, State);
-parse_value(<<C, Rest/binary>>, _State) when C == $'; C == $" ->
- parse_value_1(Rest, C, []);
+parse_value(<<C, Rest/binary>>, State) when C == $'; C == $" ->
+ parse_value_1(Rest, C, [], State);
parse_value(_, State) ->
?fatal_error(State, "\', \" or whitespace expected").
@@ -383,10 +383,12 @@ parse_value(_, State) ->
%% Rest = binary()
%% Description: Parsing an attribute value from the stream.
%%----------------------------------------------------------------------
-parse_value_1(<<Stop, Rest/binary>>, Stop, Acc) ->
+parse_value_1(<<Stop, Rest/binary>>, Stop, Acc, _State) ->
{lists:reverse(Acc), Rest};
-parse_value_1(<<C, Rest/binary>>, Stop, Acc) ->
- parse_value_1(Rest, Stop, [C |Acc]).
+parse_value_1(<<C, Rest/binary>>, Stop, Acc, State) ->
+ parse_value_1(Rest, Stop, [C |Acc], State);
+parse_value_1(_, _Stop, _Acc, State) ->
+ ?fatal_error(State, "end of input and no \' or \" found").
%%======================================================================
%% Default functions