wasm: Fix infinite loop in Node.text when tree and text are out-of-sync
This commit is contained in:
parent
9e1649d9f8
commit
9848ceb3e2
2 changed files with 22 additions and 11 deletions
|
|
@ -67,7 +67,7 @@ class Parser {
|
|||
|
||||
parse(callback, oldTree, options) {
|
||||
if (typeof callback === 'string') {
|
||||
currentParseCallback = index => callback.slice(index);
|
||||
currentParseCallback = (index, _, endIndex) => callback.slice(index, endIndex);
|
||||
} else if (typeof callback === 'function') {
|
||||
currentParseCallback = callback;
|
||||
} else {
|
||||
|
|
@ -243,13 +243,23 @@ class Node {
|
|||
}
|
||||
|
||||
get text() {
|
||||
const startIndex = this.startIndex;
|
||||
const length = this.endIndex - startIndex;
|
||||
let result = this.tree.textCallback(startIndex);
|
||||
while (result.length < length) {
|
||||
result += this.tree.textCallback(startIndex + result.length);
|
||||
let {startIndex, endIndex} = this;
|
||||
const length = endIndex - startIndex;
|
||||
let result = this.tree.textCallback(startIndex, null, endIndex);
|
||||
startIndex += result.length;
|
||||
while (startIndex < endIndex) {
|
||||
const string = this.tree.textCallback(startIndex, null, endIndex);
|
||||
if (string && string.length > 0) {
|
||||
startIndex += string.length;
|
||||
result += string;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
return result.slice(0, length);
|
||||
if (startIndex > endIndex) {
|
||||
result = result.slice(0, length);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
isNamed() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue