mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-02-01 03:12:42 +01:00
Fixed a bug that creates invalid HTML at Export that lets Abiwords parser crash
This commit is contained in:
parent
2cc7dcb751
commit
90ba811bb5
1 changed files with 33 additions and 3 deletions
|
@ -119,8 +119,10 @@ function getHTMLFromAtext(pad, atext)
|
||||||
var taker = Changeset.stringIterator(text);
|
var taker = Changeset.stringIterator(text);
|
||||||
var assem = Changeset.stringAssembler();
|
var assem = Changeset.stringAssembler();
|
||||||
|
|
||||||
|
var openTags = [];
|
||||||
function emitOpenTag(i)
|
function emitOpenTag(i)
|
||||||
{
|
{
|
||||||
|
openTags.unshift(i);
|
||||||
assem.append('<');
|
assem.append('<');
|
||||||
assem.append(tags[i]);
|
assem.append(tags[i]);
|
||||||
assem.append('>');
|
assem.append('>');
|
||||||
|
@ -128,10 +130,27 @@ function getHTMLFromAtext(pad, atext)
|
||||||
|
|
||||||
function emitCloseTag(i)
|
function emitCloseTag(i)
|
||||||
{
|
{
|
||||||
|
openTags.shift();
|
||||||
assem.append('</');
|
assem.append('</');
|
||||||
assem.append(tags[i]);
|
assem.append(tags[i]);
|
||||||
assem.append('>');
|
assem.append('>');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function orderdCloseTags(tags2close)
|
||||||
|
{
|
||||||
|
for(var i=0;i<openTags.length;i++)
|
||||||
|
{
|
||||||
|
for(var j=0;j<tags2close.length;j++)
|
||||||
|
{
|
||||||
|
if(tags2close[j] == openTags[i])
|
||||||
|
{
|
||||||
|
emitCloseTag(tags2close[j]);
|
||||||
|
i--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var urls = _findURLs(text);
|
var urls = _findURLs(text);
|
||||||
|
|
||||||
|
@ -204,18 +223,25 @@ function getHTMLFromAtext(pad, atext)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var tags2close = [];
|
||||||
|
|
||||||
for (var i = propVals.length - 1; i >= 0; i--)
|
for (var i = propVals.length - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (propVals[i] === LEAVE)
|
if (propVals[i] === LEAVE)
|
||||||
{
|
{
|
||||||
emitCloseTag(i);
|
//emitCloseTag(i);
|
||||||
|
tags2close.push(i);
|
||||||
propVals[i] = false;
|
propVals[i] = false;
|
||||||
}
|
}
|
||||||
else if (propVals[i] === STAY)
|
else if (propVals[i] === STAY)
|
||||||
{
|
{
|
||||||
emitCloseTag(i);
|
//emitCloseTag(i);
|
||||||
|
tags2close.push(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
orderdCloseTags(tags2close);
|
||||||
|
|
||||||
for (var i = 0; i < propVals.length; i++)
|
for (var i = 0; i < propVals.length; i++)
|
||||||
{
|
{
|
||||||
if (propVals[i] === ENTER || propVals[i] === STAY)
|
if (propVals[i] === ENTER || propVals[i] === STAY)
|
||||||
|
@ -235,14 +261,18 @@ function getHTMLFromAtext(pad, atext)
|
||||||
|
|
||||||
assem.append(_escapeHTML(s));
|
assem.append(_escapeHTML(s));
|
||||||
} // end iteration over spans in line
|
} // end iteration over spans in line
|
||||||
|
|
||||||
|
var tags2close = [];
|
||||||
for (var i = propVals.length - 1; i >= 0; i--)
|
for (var i = propVals.length - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (propVals[i])
|
if (propVals[i])
|
||||||
{
|
{
|
||||||
emitCloseTag(i);
|
tags2close.push(i);
|
||||||
propVals[i] = false;
|
propVals[i] = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
orderdCloseTags(tags2close);
|
||||||
} // end processNextChars
|
} // end processNextChars
|
||||||
if (urls)
|
if (urls)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue