diff --git a/src/pooptmodule.c b/src/pooptmodule.c index b696fe4e..8a021379 100644 --- a/src/pooptmodule.c +++ b/src/pooptmodule.c @@ -44,6 +44,8 @@ static PyObject *poopt_cut_text(PyObject *self, PyObject *args) int last_space = -1; int start_pos = 0; + int w = width; /* this is a width that increases to make the length of char + of colors attribute be ignored */ PyObject* retlist = PyList_New(0); while (buffer[bpos]) @@ -57,7 +59,7 @@ static PyObject *poopt_cut_text(PyObject *self, PyObject *args) start_pos = spos + 1; last_space = -1; } - else if ((spos - start_pos) >= width) + else if ((spos - start_pos) >= w) { if (last_space == -1) { @@ -72,11 +74,24 @@ static PyObject *poopt_cut_text(PyObject *self, PyObject *args) start_pos = last_space + 1; last_space = -1; } + w = width; } if (buffer[bpos] == 25) /* \x19 */ { - spos++; - bpos += 2; + while (buffer[bpos] && + buffer[bpos] != 'u' && + buffer[bpos] != 'b' && + buffer[bpos] != 'o' && + buffer[bpos] != '}') + { + bpos++; + spos++; + w++; + } + bpos++; + spos++; + w++; + spos--; } else if (buffer[bpos] <= 127) /* ASCII char on one byte */ diff --git a/src/xhtml.py b/src/xhtml.py index 973a4d18..99e0bf01 100644 --- a/src/xhtml.py +++ b/src/xhtml.py @@ -16,7 +16,11 @@ import re import subprocess import curses from sleekxmpp.xmlstream import ET + +import xml.sax.saxutils + from xml.etree.ElementTree import ElementTree + from sys import version_info from config import config @@ -399,7 +403,7 @@ def poezio_colors_to_html(string): while next_attr_char != -1: attr_char = string[next_attr_char+1].lower() if next_attr_char != 0: - res += string[:next_attr_char] + res += xml.sax.saxutils.escape(string[:next_attr_char]) if attr_char == 'o': for elem in opened_elements[::-1]: res += '' % (elem,) @@ -423,7 +427,7 @@ def poezio_colors_to_html(string): else: string = string[next_attr_char+2:] next_attr_char = string.find('\x19') - res += string + res += xml.sax.saxutils.escape(string) for elem in opened_elements[::-1]: res += '' % (elem,) res += "

"