Ace: Absturz des Speicherlecks im XML-Modus

Erstellt am 14. Aug. 2018  ·  4Kommentare  ·  Quelle: ajaxorg/ace

Das Eingeben einer bestimmten Zeichenfolge im XML-Modus führt zu einem Speicherverlust/einer Endlosschleife, die schließlich die Seite zum Absturz bringt. Fortpflanzen:

  1. Gehen Sie zu https://ace.c9.io/build/kitchen-sink.html
  2. Setzen Sie den Modus auf XML
  3. Inhalt des Dokuments löschen
  4. Fügen Sie Folgendes ein: <A><![CDATA[</A>
  5. Sehen Sie sich den Speicher-Tab von Chrome Debugger an, um das Speicherleck zu sehen. Die Seite wird bald abstürzen (ich brauche ungefähr 45 Sekunden).

Dieser Fehler ist in der aktuellen Version von Ace vorhanden und mindestens bis Ace 1.2.3.
Abstürze unter Windows 7 und 10 in Chrome.

Hilfreichster Kommentar

Nur fürs Protokoll gibt es andere Inhalte, die das gleiche Speicherleck auslösen. Gehen Sie zu https://ace.c9.io/build/kitchen-sink.html und wechseln Sie in den XML-Modus. Geben Sie irgendwo in der Mitte <?p . Nach ein paar Sekunden stürzt der Browser ab. Safari, Chrome, FF - alle gleich.

Alle 4 Kommentare

Ich habe das Problem als diese Zeile identifiziert: https://github.com/ajaxorg/ace/blob/dbdf8aaad697e2ded8fd69249b72a7e898583afa/lib/ace/mode/xml/sax.js#L479

end ist gleich -1, da die Zeichenfolge "]]>" nicht existiert. Dies führt dazu, dass der Rückgabewert 2 ist, was eine Endlosschleife verursacht. Ich bin relativ unbekannt mit dem Ace-Editor. Ich habe eine einfache Lösung gefunden:

var end = source.indexOf(']]>',start+9);
if (end < 0) {
  return -1;
}

Ein kleines Problem besteht darin, dass das Dokument nach dem beschädigten CDATA[-String aufhört zu tokenisieren, sodass wir die Syntaxhervorhebung verlieren. Es wäre schön, wenn wir das Syntax-Highlighting irgendwie beibehalten könnten.

die sax.js ist eine Drittanbieterbibliothek, die zum Linting verwendet wird, sie sollte die Syntaxhervorhebung nicht beeinträchtigen.
Angesichts der Menge an Fehlern, die Sie darin gefunden haben, frage ich mich, ob wir zu etwas anderem wechseln sollten, z. B. https://www.npmjs.com/package/xmlchecker oder http://syssgx.github.io/xml.js/

Eine andere Alternative könnte https://github.com/lddubeau/saxes . sein
Es sieht so aus, als ob es eine Reihe der offenen XML-Fehler beheben könnte

Ein Problem für mich ist, dass der aktuelle XML-Modus Linting für ein XML-Fragment und kein XML-Dokument validiert.
Z.B
just some text
und
<foo/><foo/>
gelten als gültige XML. Ist das beabsichtigt?

Ich habe eine Repl-Seite zusammengestellt, um saxes in Aktion zu zeigen
https://repl.it/@apb2006/xml -parser-saxes-test

Nur fürs Protokoll gibt es andere Inhalte, die das gleiche Speicherleck auslösen. Gehen Sie zu https://ace.c9.io/build/kitchen-sink.html und wechseln Sie in den XML-Modus. Geben Sie irgendwo in der Mitte <?p . Nach ein paar Sekunden stürzt der Browser ab. Safari, Chrome, FF - alle gleich.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen