messageTray: improve bad-markup handling
_fixMarkup() was supposed to be ensuring that the markup we passed to clutter was correct, but it was validating the syntax incorrectly, and wasn't checking that the markup was valid (or even well-formed). This is bad because if you pass bad pango markup to clutter_text_set_markup(), it will g_warn and drop the string on the floor. Fix by fixing up the regexps, and then calling Pango.parse_markup() on the result, and just xml-escaping everything if parse_markup() fails. https://bugzilla.gnome.org/show_bug.cgi?id=650298
This commit is contained in:
parent
9003a34285
commit
7542e68b6f
@ -68,14 +68,19 @@ function _fixMarkup(text, allowMarkup) {
|
|||||||
// Support &, ", ', < and >, escape all other
|
// Support &, ", ', < and >, escape all other
|
||||||
// occurrences of '&'.
|
// occurrences of '&'.
|
||||||
let _text = text.replace(/&(?!amp;|quot;|apos;|lt;|gt;)/g, '&');
|
let _text = text.replace(/&(?!amp;|quot;|apos;|lt;|gt;)/g, '&');
|
||||||
|
|
||||||
// Support <b>, <i>, and <u>, escape anything else
|
// Support <b>, <i>, and <u>, escape anything else
|
||||||
// so it displays as raw markup.
|
// so it displays as raw markup.
|
||||||
return _text.replace(/<(\/?[^biu]>|[^>\/][^>])/g, '<$1');
|
_text = _text.replace(/<(?!\/?[biu]>)/g, '<');
|
||||||
} else {
|
|
||||||
// Escape everything
|
try {
|
||||||
let _text = text.replace(/&/g, '&');
|
Pango.parse_markup(_text, -1, '');
|
||||||
return _text.replace(/</g, '<');
|
return _text;
|
||||||
|
} catch (e) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// !allowMarkup, or invalid markup
|
||||||
|
return GLib.markup_escape_text(text, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
function URLHighlighter(text, lineWrap, allowMarkup) {
|
function URLHighlighter(text, lineWrap, allowMarkup) {
|
||||||
|
Loading…
Reference in New Issue
Block a user