]> granicus.if.org Git - llvm/commitdiff
[sancov] coverage-report-server.py: ServerHandler(): open file as UTF8
authorRoman Lebedev <lebedev.ri@gmail.com>
Tue, 12 Sep 2017 18:59:21 +0000 (18:59 +0000)
committerRoman Lebedev <lebedev.ri@gmail.com>
Tue, 12 Sep 2017 18:59:21 +0000 (18:59 +0000)
Summary:
This is nessesary in Python3. Everywhere else we assume that
encoding is UTF8. If we don't specify it here, the defaults
from the environment will be used, which may result in ASCII
decoder being used. And if the file is non-ASCII, then it
will crash:
```
  File "/usr/local/bin/coverage-report-server.py", line 168, in do_GET
    for line_no, line in enumerate(f, start=1)])
  File "/usr/local/bin/coverage-report-server.py", line 165, in <listcomp>
    ["<span class='{cls}'>{line}&nbsp;</span>".format(
  File "/usr/lib/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 106: ordinal not in range(128)
```

Fixes https://bugs.llvm.org/show_bug.cgi?id=33548

Now, how would i add a testcase here?

Reviewers: m.ostapenko, kcc

Reviewed By: kcc

Subscribers: kcc, llvm-commits

Tags: #sanitizers

Differential Revision: https://reviews.llvm.org/D37661

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@313063 91177308-0d34-0410-b5e6-96231b3b80d8

tools/sancov/coverage-report-server.py

index 428276f95d3b398c90e11a3b067b9c0e2f63866a..a2e161d0de58b43a580e9609ef3e4de9aae2a164 100755 (executable)
@@ -160,7 +160,7 @@ class ServerHandler(http.server.BaseHTTPRequestHandler):
 
             linemap = self.symcov_data.compute_linemap(filename)
 
-            with open(filepath, 'r') as f:
+            with open(filepath, 'r', encoding='utf8') as f:
                 content = "\n".join(
                         ["<span class='{cls}'>{line}&nbsp;</span>".format(
                             line=html.escape(line.rstrip()),