aboutcode-org / aboutcode-org/scancode-toolkit

extractcode crash with certain symbolic links on Windows 10

Abierto
#2,155 2 comentarios 0 reacciones 2 asignados Reclamado por @pombredanne Ver en GitHub
bug
Lenguaje dominante
Python
Estrellas
2.6k
Forks
791
Merge medio
1 d 12 h
PR fusionados (30 d)
5

Descripción

### Description

extractcode has problems with symbolic links on Windows -> Leads to a crash.

[tar.utf8.tar.bz2.zip](https://github.com/nexB/scancode-toolkit/files/5041008/tar.utf8.tar.bz2.zip)

Please chatch the errors and prevent a crash. Possible work-around for the underlying issues:
- rename the symbolic links to some unique file name
- ignore the problematic symbolic links with a warning

### How To Reproduce
Download busybox-1.26.2 and try to run extractcode on it as follows. I attached the problematic archive.

c:\scancode-toolkit-3.1.1>extractcode --verbose C:\sources
Extracting archives...
Extracting: \busybox-1.26.2\busybox-1.26.2.tar.bz2-extract\busybox-1.26.2\testsuite\tar.utf8.tar.bz2
Traceback (most recent call last):
File "c:\scancode-toolkit-3.1.1\src\extractcode\extract.py", line 187, in extract_file
warns = extractor(abs_location, tmp_tgt) or []
File "c:\scancode-toolkit-3.1.1\src\extractcode\libarchive2.py", line 134, in extract
for entry in list_entries(abs_location):
File "c:\scancode-toolkit-3.1.1\src\extractcode\libarchive2.py", line 171, in list_entries
for entry in archive:
File "c:\scancode-toolkit-3.1.1\src\extractcode\libarchive2.py", line 251, in iter
entry = Entry(self, entry_struct)
File "c:\scancode-toolkit-3.1.1\src\extractcode\libarchive2.py", line 333, in __init__
self.symlink_path = self.get_path(symlink_path, symlink_path_w)
File "c:\scancode-toolkit-3.1.1\src\extractcode\libarchive2.py", line 350, in get_path
path = func(self.entry_struct)
File "c:\scancode-toolkit-3.1.1\src\extractcode\libarchive2.py", line 500, in errcheck
raise ArchiveError(rc, archive_struct, archive_func)
extractcode.libarchive2.ArchiveError:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "c:\scancode-toolkit-3.1.1\Scripts\extractcode-script.py", line 11, in
load_entry_point('scancode-toolkit', 'console_scripts', 'extractcode')()
File "c:\scancode-toolkit-3.1.1\lib\site-packages\click\core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "c:\scancode-toolkit-3.1.1\src\scancode\utils.py", line 70, in main
standalone_mode=standalone_mode, **extra)
File "c:\scancode-toolkit-3.1.1\lib\site-packages\click\core.py", line 697, in main
rv = self.invoke(ctx)
File "c:\scancode-toolkit-3.1.1\lib\site-packages\click\core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "c:\scancode-toolkit-3.1.1\lib\site-packages\click\core.py", line 535, in invoke
return callback(*args, **kwargs)
File "c:\scancode-toolkit-3.1.1\lib\site-packages\click\decorators.py", line 17, in new_func
return f(get_current_context(), *args, **kwargs)
File "c:\scancode-toolkit-3.1.1\src\scancode\extract_cli.py", line 167, in extractcode
for xev in extraction_events:
File "c:\scancode-toolkit-3.1.1\lib\site-packages\click\_termui_impl.py", line 259, in next
rv = next(self.iter)
File "c:\scancode-toolkit-3.1.1\src\scancode\api.py", line 331, in extract_archives
for xevent in extract(location, kinds=default_kinds, recurse=recurse):
File "c:\scancode-toolkit-3.1.1\src\extractcode\extract.py", line 162, in extract
for xevent in extract(target, kinds, recurse):
File "c:\scancode-toolkit-3.1.1\src\extractcode\extract.py", line 154, in extract
for xevent in extract_file(loc, target, kinds):
File "c:\scancode-toolkit-3.1.1\src\extractcode\extract.py", line 192, in extract_file
errors = [str(e).strip(' \'"')]
TypeError: __str__ returned non-string (type NoneType)

### System configuration

Windows 10 x64
scancode-toolkit-3.1.1
installed from source with git clone

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.