Patchwork [STABLE] py3: avoid iterating over a literal bytes in highlight

login
register
mail settings
Submitter Denis Laxalde
Date Nov. 12, 2019, 10:21 a.m.
Message ID <430d80ba9271920ca6da.1573554111@steppe.local>
Download mbox | patch
Permalink /patch/43146/
State Accepted
Headers show

Comments

Denis Laxalde - Nov. 12, 2019, 10:21 a.m.
# HG changeset patch
# User Denis Laxalde <denis.laxalde@logilab.fr>
# Date 1573553103 -3600
#      Tue Nov 12 11:05:03 2019 +0100
# Branch stable
# Node ID 430d80ba9271920ca6da8db62b507390f65d20d1
# Parent  e513e87b0476cc9a6eb31abe420448877fa9c902
py3: avoid iterating over a literal bytes in highlight

In Python 3, iterating over a bytes literal yields integers. Since we
use the value in `text.replace()`, this fails on Python 3 with the
following trackback:

    Traceback (most recent call last):
      File "/usr/lib/python3/dist-packages/mercurial/hgweb/hgwebdir_mod.py", line 378, in run_wsgi
        for r in self._runwsgi(req, res):
      File "/usr/lib/python3/dist-packages/mercurial/hgweb/hgweb_mod.py", line 326, in run_wsgi
        for r in self._runwsgi(req, res, repo):
      File "/usr/lib/python3/dist-packages/mercurial/hgweb/hgweb_mod.py", line 449, in _runwsgi
        return getattr(webcommands, cmd)(rctx)
      File "/usr/lib/python3/dist-packages/mercurial/hgweb/webcommands.py", line 211, in file
        return _filerevision(web, webutil.filectx(web.repo, web.req))
      File "/usr/lib/python3/dist-packages/hgext/highlight/__init__.py", line 72, in filerevision_highlight
        pygmentize(web, b'fileline', fctx, web.tmpl)
      File "/usr/lib/python3/dist-packages/hgext/highlight/__init__.py", line 58, in pygmentize
        field, fctx, style, tmpl, guessfilenameonly=filenameonly
      File "/usr/lib/python3/dist-packages/hgext/highlight/highlight.py", line 62, in pygmentize
        text = text.replace(c, b'')
    TypeError: a bytes-like object is required, not 'int'
Yuya Nishihara - Nov. 12, 2019, 1:26 p.m.
On Tue, 12 Nov 2019 11:21:51 +0100, Denis Laxalde wrote:
> # HG changeset patch
> # User Denis Laxalde <denis.laxalde@logilab.fr>
> # Date 1573553103 -3600
> #      Tue Nov 12 11:05:03 2019 +0100
> # Branch stable
> # Node ID 430d80ba9271920ca6da8db62b507390f65d20d1
> # Parent  e513e87b0476cc9a6eb31abe420448877fa9c902
> py3: avoid iterating over a literal bytes in highlight

Queued for stable, thanks.

Patch

diff --git a/hgext/highlight/highlight.py b/hgext/highlight/highlight.py
--- a/hgext/highlight/highlight.py
+++ b/hgext/highlight/highlight.py
@@ -57,7 +57,7 @@  def pygmentize(field, fctx, style, tmpl,
         return
 
     # str.splitlines() != unicode.splitlines() because "reasons"
-    for c in b"\x0c\x1c\x1d\x1e":
+    for c in b"\x0c", b"\x1c", b"\x1d", b"\x1e":
         if c in text:
             text = text.replace(c, b'')