From e8dc84a21848d6ab6ccee599b5a1e5534715aff6 Mon Sep 17 00:00:00 2001 From: Andreas Madsen Date: Fri, 7 Jun 2013 08:48:14 +0200 Subject: [PATCH] [Tokenizer] don't reset CDATA state in case of long endings --- lib/Tokenizer.js | 4 +++- tests/Events/13-long-cdata-end.json | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 tests/Events/13-long-cdata-end.json diff --git a/lib/Tokenizer.js b/lib/Tokenizer.js index 69cd78215..d4f0f6743 100644 --- a/lib/Tokenizer.js +++ b/lib/Tokenizer.js @@ -326,7 +326,9 @@ Tokenizer.prototype.write = function(chunk){ this._cbs.oncdata(this._buffer.substring(this._sectionStart, this._index - 2)); this._state = TEXT; this._sectionStart = this._index + 1; - } else { + } else if (c === ']') { + // Keep the state at AFTER_CDATA_2 + }else { this._state = IN_CDATA; } } diff --git a/tests/Events/13-long-cdata-end.json b/tests/Events/13-long-cdata-end.json new file mode 100644 index 000000000..34b7b4105 --- /dev/null +++ b/tests/Events/13-long-cdata-end.json @@ -0,0 +1,22 @@ +{ + "name": "Long CDATA ending", + "options": { + "handler": {}, + "parser": {"xmlMode": true} + }, + "html": "", + "expected": [ + { "event": "opentagname", "data": [ "before" ] }, + { "event": "opentag", "data": [ "before", {} ] }, + { "event": "closetag", "data": [ "before" ] }, + { "event": "opentagname", "data": [ "tag" ] }, + { "event": "opentag", "data": [ "tag", {} ] }, + { "event": "cdatastart", "data": [] }, + { "event": "text", "data": [ " text ]" ] }, + { "event": "cdataend", "data": [] }, + { "event": "closetag", "data": [ "tag" ] }, + { "event": "opentagname", "data": [ "after" ] }, + { "event": "opentag", "data": [ "after", {} ] }, + { "event": "closetag", "data": [ "after" ] } + ] +} \ No newline at end of file