Ace: Fallo de pérdida de memoria en modo XML

Creado en 14 ago. 2018  ·  4Comentarios  ·  Fuente: ajaxorg/ace

Escribir una determinada secuencia de caracteres en modo XML da como resultado una pérdida de memoria / bucle infinito que finalmente bloquea la página. Reproducir:

  1. Vaya a https://ace.c9.io/build/kitchen-sink.html
  2. Establecer el modo en XML
  3. Eliminar el contenido del documento
  4. Pegue lo siguiente: <A><![CDATA[</A>
  5. Mire la pestaña de memoria del depurador de Chrome para ver la pérdida de memoria. La página pronto se bloqueará (me toma unos 45 segundos).

Este error está presente en la versión actual de Ace, y al menos desde Ace 1.2.3.
Se bloquea en Windows 7 y 10, en Chrome.

Comentario más útil

Solo para que conste, hay otro contenido que desencadena la misma pérdida de memoria. Vaya a https://ace.c9.io/build/kitchen-sink.html y cambie al modo XML. En algún lugar del medio, escriba <?p . Después de un par de segundos, el navegador se bloquea. Safari, Chrome, FF, todos iguales.

Todos 4 comentarios

Identifiqué el problema como esta línea: https://github.com/ajaxorg/ace/blob/dbdf8aaad697e2ded8fd69249b72a7e898583afa/lib/ace/mode/xml/sax.js#L479

end es igual a -1 porque la cadena "]]>" no existe. Esto hace que el valor de retorno sea 2, provocando un bucle infinito. No estoy familiarizado con el editor Ace. Encontré una solución simple:

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

Un pequeño problema es que el documento dejará de tokenizarse después de la cadena CDATA [rota, por lo que perdemos el resaltado de sintaxis. Sería bueno si de alguna manera pudiéramos mantener el resaltado de sintaxis.

sax.js es una biblioteca de terceros que se utiliza para linting, no debería afectar el resaltado de sintaxis.
Teniendo en cuenta la cantidad de errores que encontró en él, me pregunto si deberíamos cambiar a otra cosa, por ejemplo, https://www.npmjs.com/package/xmlchecker o http://syssgx.github.io/xml.js/

Otra alternativa podría ser https://github.com/lddubeau/saxes
Parece que podría solucionar una serie de errores de xml abiertos

Un problema para mí es que el modo xml actual se está validando para un fragmento xml, no para un documento xml.
P.ej
just some text
y
<foo/><foo/>
se consideran xml válidos. ¿Es esto por diseño?

Creé una página de respuesta para mostrar saxes en acción
https://repl.it/@apb2006/xml -parser-saxes-test

Solo para que conste, hay otro contenido que desencadena la misma pérdida de memoria. Vaya a https://ace.c9.io/build/kitchen-sink.html y cambie al modo XML. En algún lugar del medio, escriba <?p . Después de un par de segundos, el navegador se bloquea. Safari, Chrome, FF, todos iguales.

¿Fue útil esta página
0 / 5 - 0 calificaciones