From e263a128aba6729ea785eab90a2e0b471c73edce Mon Sep 17 00:00:00 2001 From: "Adam D. Ruppe" Date: Thu, 23 May 2013 08:53:21 -0400 Subject: [PATCH] range violation checks on tag soup --- dom.d | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/dom.d b/dom.d index b425092..8b1d8d2 100644 --- a/dom.d +++ b/dom.d @@ -3425,7 +3425,14 @@ class Document : FileResource { auto start = pos; while( data[pos] != '>' && data[pos] != '/' && data[pos] != ' ' && data[pos] != '\n' && data[pos] != '\t') + { pos++; + if(pos == data.length) + if(strict) + throw new Exception("tag name incomplete when file ended"); + else + break; + } if(!caseSensitive) return toLower(data[start..pos]); @@ -3661,7 +3668,7 @@ class Document : FileResource { if(!selfClosed) selfClosed = tagName.isInArray(selfClosedElements); - while(data[pos] != '>') + while(pos < data.length && data[pos] != '>') pos++; } @@ -3785,6 +3792,11 @@ class Document : FileResource { return Ele(0, e, null); } + // if a tag was opened but not closed by end of file, we can arrive here + if(!strict && pos >= data.length) + return addTag(false); + //else if(strict) assert(0); // should be caught before + switch(data[pos]) { default: assert(0); case '/': // self closing tag