Skip to content

Commit 3a6ab5c

Browse files
thierryredingtorvalds
authored andcommitted
scripts/spdxcheck.py: always open files in binary mode
The spdxcheck script currently falls over when confronted with a binary file (such as Documentation/logo.gif). To avoid that, always open files in binary mode and decode line-by-line, ignoring encoding errors. One tricky case is when piping data into the script and reading it from standard input. By default, standard input will be opened in text mode, so we need to reopen it in binary mode. The breakage only happens with python3 and results in a UnicodeDecodeError (according to Uwe). Link: http://lkml.kernel.org/r/20181212131210.28024-1-thierry.reding@gmail.com Fixes: 6f4d29d ("scripts/spdxcheck.py: make python3 compliant") Signed-off-by: Thierry Reding <treding@nvidia.com> Reviewed-by: Jeremy Cline <jcline@redhat.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Joe Perches <joe@perches.com> Cc: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent f1733a1 commit 3a6ab5c

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

scripts/spdxcheck.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ def parse_lines(self, fd, maxlines, fname):
168168
self.curline = 0
169169
try:
170170
for line in fd:
171+
line = line.decode(locale.getpreferredencoding(False), errors='ignore')
171172
self.curline += 1
172173
if self.curline > maxlines:
173174
break
@@ -249,12 +250,13 @@ def scan_git_subtree(tree, path):
249250

250251
try:
251252
if len(args.path) and args.path[0] == '-':
252-
parser.parse_lines(sys.stdin, args.maxlines, '-')
253+
stdin = os.fdopen(sys.stdin.fileno(), 'rb')
254+
parser.parse_lines(stdin, args.maxlines, '-')
253255
else:
254256
if args.path:
255257
for p in args.path:
256258
if os.path.isfile(p):
257-
parser.parse_lines(open(p), args.maxlines, p)
259+
parser.parse_lines(open(p, 'rb'), args.maxlines, p)
258260
elif os.path.isdir(p):
259261
scan_git_subtree(repo.head.reference.commit.tree, p)
260262
else:

0 commit comments

Comments
 (0)