Mercurial > hg
view tests/test-fuzz-targets.t @ 43597:856cce0c255c stable
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'
author | Denis Laxalde <denis.laxalde@logilab.fr> |
---|---|
date | Tue, 12 Nov 2019 11:05:03 +0100 |
parents | 39cab871e880 |
children | 19da643dc10c |
line wrap: on
line source
#require test-repo $ cd $TESTDIR/../contrib/fuzz which(1) could exit nonzero, but that's fine because we'll still end up without a valid executable, so we don't need to check $? here. $ if which gmake >/dev/null 2>&1; then > MAKE=gmake > else > MAKE=make > fi $ havefuzz() { > cat > $TESTTMP/dummy.cc <<EOF > #include <stdlib.h> > #include <stdint.h> > int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; } > int main(int argc, char **argv) { > const char data[] = "asdf"; > return LLVMFuzzerTestOneInput((const uint8_t *)data, 4); > } > EOF > $CXX $TESTTMP/dummy.cc -o $TESTTMP/dummy \ > -fsanitize=fuzzer-no-link,address || return 1 > } #if clang-libfuzzer $ CXX=clang++ havefuzz || exit 80 $ $MAKE -s clean all #endif #if no-clang-libfuzzer clang-6.0 $ CXX=clang++-6.0 havefuzz || exit 80 $ $MAKE -s clean all CC=clang-6.0 CXX=clang++-6.0 #endif #if no-clang-libfuzzer no-clang-6.0 $ exit 80 #endif Just run the fuzzers for five seconds each to verify it works at all. $ ./bdiff -max_total_time 5 $ ./mpatch -max_total_time 5 $ ./xdiff -max_total_time 5 Clean up. $ $MAKE -s clean