diff --git a/kallithea/lib/diffs.py b/kallithea/lib/diffs.py --- a/kallithea/lib/diffs.py +++ b/kallithea/lib/diffs.py @@ -448,9 +448,9 @@ class DiffProcessor(object): _escape_re = re.compile(r'(&)|(<)|(>)|(\t)|(\r)|(?<=.)( \n| $)|(\t\n|\t$)') -def _escaper(string): +def _escaper(diff_line): """ - Do HTML escaping/markup + Do HTML escaping/markup of a single diff line (including first +/- column) """ def substitute(m): @@ -471,7 +471,7 @@ def _escaper(string): return '\t' assert False - return _escape_re.sub(substitute, safe_str(string)) + return _escape_re.sub(substitute, diff_line) _git_header_re = re.compile(br""" @@ -536,7 +536,7 @@ def _get_header(vcs, diff_chunk): rest = diff_chunk[match.end():] if rest and _header_next_check.match(rest): raise Exception('cannot parse %s diff header: %r followed by %r' % (vcs, safe_str(bytes(diff_chunk[:match.end()])), safe_str(bytes(rest[:1000])))) - diff_lines = (_escaper(m.group(0)) for m in re.finditer(br'.*\n|.+$', rest)) # don't split on \r as str.splitlines do + diff_lines = (_escaper(safe_str(m.group(0))) for m in re.finditer(br'.*\n|.+$', rest)) # don't split on \r as str.splitlines do return meta_info, diff_lines