From fbcf11307e6e5eb9685fe6603ec2935638217423 Mon Sep 17 00:00:00 2001 From: Lars Thorsen Date: Thu, 9 Jan 2014 10:23:00 +0100 Subject: [xmerl] Fix bug in SAX parser when next doc start in the same buffer --- lib/xmerl/src/xmerl_sax_parser_base.erlsrc | 38 +++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/lib/xmerl/src/xmerl_sax_parser_base.erlsrc b/lib/xmerl/src/xmerl_sax_parser_base.erlsrc index 7b64d7c302..6f95b67b99 100644 --- a/lib/xmerl/src/xmerl_sax_parser_base.erlsrc +++ b/lib/xmerl/src/xmerl_sax_parser_base.erlsrc @@ -207,8 +207,13 @@ parse_prolog(?STRING_EMPTY, State) -> parse_prolog(?STRING("<") = Bytes, State) -> cf(Bytes, State, fun parse_prolog/2); parse_prolog(?STRING_REST(" - {Rest1, State1} = parse_pi(Rest, State), - parse_prolog(Rest1, State1); + case parse_pi(Rest, State) of + {Rest1, State1} -> + parse_prolog(Rest1, State1); + {endDocument, Rest1, State1} -> + IValue = ?TO_INPUT_FORMAT(" parse_prolog_1(Rest, State); parse_prolog(?STRING_REST("<", Rest), State) -> @@ -411,7 +416,7 @@ parse_pi(?STRING_UNBOUND_REST(C, Rest) = Bytes, State) -> "xml" -> case State#xmerl_sax_parser_state.end_tags of [] -> - {Bytes, State}; + {endDocument, Bytes, State}; _ -> ?fatal_error(State1, " not first in document") end; @@ -657,8 +662,13 @@ parse_misc(?STRING_EMPTY, State, Eod) -> parse_misc(?STRING("<") = Rest, State, Eod) -> cf(Rest, State, Eod, fun parse_misc/3); parse_misc(?STRING_REST(" - {Rest1, State1} = parse_pi(Rest, State), - parse_misc(Rest1, State1, Eod); + case parse_pi(Rest, State) of + {Rest1, State1} -> + parse_misc(Rest1, State1, Eod); + {endDocument, Rest1, State1} -> + IValue = ?TO_INPUT_FORMAT(" cf(Rest, State, Eod, fun parse_misc/3); parse_misc(?STRING(" @@ -1063,8 +1073,13 @@ parse_content(?STRING_REST("