Skip to content

scancode crash/error when supplying an existing directory instead of a file to --json-pp #3588

Open
@armijnhemel

Description

@armijnhemel

Description

scancode crashes with an error IsADirectoryError when supplying an existing directory to --json-pp instead of the name of a file.

How To Reproduce

Tell us how to reproduce the issue.

$ mkdir /tmp/bla
$ ./scancode -l scancode --json-pp /tmp/bla

This results in the following error:

$ ./scancode -l scancode --json-pp /tmp/bla
Setup plugins...
Collect file inventory...
Scan files for: licenses with 1 process(es)...
[####################] 2                  
ERROR: failed to run output plugin: json-pp:
Traceback (most recent call last):
  File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/click/utils.py", line 152, in open
    rv, self.should_close = open_stream(
  File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/click/_compat.py", line 404, in open_stream
    return _wrap_io_open(filename, mode, encoding, errors), True
  File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/click/_compat.py", line 379, in _wrap_io_open
    return open(file, mode, encoding=encoding, errors=errors)
IsADirectoryError: [Errno 21] Is a directory: '/tmp/bla'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/armijn/git/scancode-toolkit/src/scancode/cli.py", line 1084, in run_codebase_plugins
    plugin.process_codebase(codebase, **kwargs)
  File "/home/armijn/git/scancode-toolkit/src/formattedcode/output_json.py", line 77, in process_codebase
    write_results(codebase, output_file=output_json_pp, pretty=True, **kwargs)
  File "/home/armijn/git/scancode-toolkit/src/formattedcode/output_json.py", line 101, in write_results
    with jsonstreams.Stream(
  File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/jsonstreams/__init__.py", line 596, in __init__
    self.__inst = self._types[jtype](
  File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/jsonstreams/__init__.py", line 349, in __init__
    self._writer.raw_write('{', indent=_indent, newline=indent)
  File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/jsonstreams/__init__.py", line 165, in raw_write
    self.fd.write(value)
  File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/click/utils.py", line 137, in __getattr__
    return getattr(self.open(), name)
  File "/home/armijn/git/scancode-toolkit/venv/lib/python3.10/site-packages/click/utils.py", line 158, in open
    raise FileError(self.name, hint=e.strerror) from e
click.exceptions.FileError: Is a directory
Scanning done.
Summary:        licenses with 1 process(es)
Errors count:   0
Scan Speed:     1.89 files/sec. 
Initial counts: 1 resource(s): 1 file(s) and 0 directorie(s) 
Final counts:   1 resource(s): 1 file(s) and 0 directorie(s) 
Timings:
  scan_start: 2023-11-17T130042.965142
  scan_end:   2023-11-17T130046.632893
  setup_scan:licenses: 3.13s
  setup: 3.13s
  scan: 0.53s
  total: 3.68s
Removing temporary files...done.

One solution is to add a few more checks to see if the files that are supplied to scancode as output files already exist and only continue if it is a file (or even then maybe not) before scancode is run.

System configuration

For bug reports, it really helps us to know:

  • What OS are you running on? Linux
  • What version of scancode-toolkit was used to generate the scan file? Git 8de1e90
  • What installation method was used to install/run scancode? (pip/source download/other) source download

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions