scancode aborts when encountering a broken RPM archive

Abierto Apto para principiantes
#5,407 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

@adeba4343-web ya está trabajando en esto.

Desde el 2/11/2026.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
62/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Activo
Stack tecnológico
python
Área
tooling

Línea de trabajo

El traceback apunta a src/packagedcode/rpm.py, donde get_rpm_tags (alrededor de la línea 87) construye RPM(rpmf) y parse (alrededor de la línea 293) la llama, y a src/packagedcode/pyrpm.py, donde read_lead (alrededor de la línea 425) lanza RPMError ante un número mágico incorrecto. Empieza reproduciendo el fallo con el archivo de prueba sospechoso tests/data/archive.rpm de fuse-archive. Se considera terminado cuando el escaneo ya no se interrumpe ni se queda colgado con un archivo que no es RPM, el error se maneja o se omite, y el pool de workers sigue funcionando.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

bug

While scanning the fuse-archive 1.22 source directory in a yocto build, scancode crashes and hangs forever:

Process ForkPoolWorker-15:
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/multiprocessing/process.py", line 314, in _bootstrap
    self.run()
  File "/usr/local/lib/python3.12/multiprocessing/process.py", line 108, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.12/multiprocessing/pool.py", line 125, in worker
    result = (True, func(*args, **kwds))
                    ^^^^^^^^^^^^^^^^^^^
  File "/scancode-toolkit/src/scancode/cli.py", line 1456, in scan_resource
    error, values_mapping = interruptor(runner, timeout=timeout)
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/scancode-toolkit/src/scancode/interrupt.py", line 91, in interruptible
    return NO_ERROR, func(*(args or ()), **(kwargs or {}))
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/scancode-toolkit/src/scancode/api.py", line 327, in get_package_data
    package_datas = _get_package_data(
                    ^^^^^^^^^^^^^^^^^^
  File "/scancode-toolkit/src/scancode/api.py", line 276, in _get_package_data
    return recognize_package_data(
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/scancode-toolkit/src/packagedcode/recognize.py", line 62, in recognize_package_data
    return list(_parse(
           ^^^^^^^^^^^^
  File "/scancode-toolkit/src/packagedcode/recognize.py", line 136, in _parse
    for parsed in handler.parse(location=location, package_only=package_only):
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/scancode-toolkit/src/packagedcode/rpm.py", line 293, in parse
    rpm_tags = get_rpm_tags(location, include_desc=True)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/scancode-toolkit/src/packagedcode/rpm.py", line 87, in get_rpm_tags
    rpm = RPM(rpmf)
          ^^^^^^^^^
  File "/scancode-toolkit/src/packagedcode/pyrpm.py", line 399, in __init__
    self.read_lead()
  File "/scancode-toolkit/src/packagedcode/pyrpm.py", line 425, in read_lead
    raise RPMError('Wrong magic number: this is not a RPM file')
packagedcode.pyrpm.RPMError: Wrong magic number: this is not a RPM file

The offending file might be https://github.com/google/fuse-archive/blob/main/tests/data/archive.rpm.

Lenguaje dominante
Python
Estrellas
2.7k
Forks
848
Merge medio
2 d 19 h
PR fusionados (30 d)
8

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de aboutcode-org/scancode-toolkit

Todos los issues de aboutcode-org/scancode-toolkit

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.