From ab46ce9820742ec794605bda026f3f813d58753d Mon Sep 17 00:00:00 2001 From: Olof hagsand Date: Thu, 19 Dec 2019 21:43:03 +0100 Subject: [PATCH] XML parser failed on `]]]>` termination of CDATA. --- CHANGELOG.md | 1 + lib/src/clixon_xml_parse.l | 10 +++------- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13a27af4..1064a3f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ * Main example yang changed to incorporate augmented state, new revision is 2019-11-15. ### Corrected Bugs +* XML parser failed on `]]]>` termination of CDATA. * [filter in netconf - one specific entry #100](https://github.com/clicon/clixon/issues/100) * [xpath_tree2cbuf() changes integers into floating point representations #99](https://github.com/clicon/clixon/issues/99) * [xml_parse_string() is slow for a long XML string #96](https://github.com/clicon/clixon/issues/96) diff --git a/lib/src/clixon_xml_parse.l b/lib/src/clixon_xml_parse.l index f57fb896..6f6631e7 100644 --- a/lib/src/clixon_xml_parse.l +++ b/lib/src/clixon_xml_parse.l @@ -94,7 +94,6 @@ ncname {namestart}{namechar}* %s STATEA %s AMPERSAND %s CDATA -%s CDATAEND %s CMNT %s STR %s TEXTDECL @@ -147,12 +146,9 @@ ncname {namestart}{namechar}* "quot;" { BEGIN(_YA->ya_lex_state); clixon_xml_parselval.string = "\""; return CHARDATA;} \n { clixon_xml_parselval.string = yytext;_YA->ya_linenum++; return (CHARDATA);} -\] { BEGIN(CDATAEND);clixon_xml_parselval.string = yytext;return (CHARDATA);} -[^]\n]+ { clixon_xml_parselval.string = yytext; return CHARDATA;} - -\n { clixon_xml_parselval.string = yytext;_YA->ya_linenum++; return (CHARDATA);} -"]>" { BEGIN(_YA->ya_lex_state); clixon_xml_parselval.string = yytext; return CHARDATA;} -. { BEGIN(CDATA); clixon_xml_parselval.string = yytext;return (CHARDATA);} +"]]>" { BEGIN(_YA->ya_lex_state); clixon_xml_parselval.string = yytext; return CHARDATA;} +\] { clixon_xml_parselval.string = yytext; return CHARDATA;} +[^]\n]+ { clixon_xml_parselval.string = yytext; return CHARDATA;} "-->" { BEGIN(START); return ECOMMENT; } .