scancode aborts when encountering a broken RPM archive

未关闭 适合新手
#5,407 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 3 天内回复

@adeba4343-web 已经在做这个了。

开始于 2026年11月2日。

评估

难度
2/5
预计耗时
1-3 小时
新手友好度
62/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
活跃
技术栈
python
领域
tooling

调研方向

回溯信息指向 src/packagedcode/rpm.py 中的 get_rpm_tags(约第 87 行)构建 RPM(rpmf) 的位置,以及调用它的 parse(约第 293 行),还指向 src/packagedcode/pyrpm.py 中的 read_lead(约第 425 行),该函数在魔数错误时抛出 RPMError。请先使用 fuse-archive 中疑似的测试文件 tests/data/archive.rpm 复现这个崩溃。完成的标准是:扫描遇到非 RPM 文件时不再中止或挂起,错误被处理或跳过,并且工作进程池能够继续运行。

由索引模型根据 Issue 内容生成。

描述

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.

主要语言
Python
星标
2.7k
派生
848
平均合并
2 天 19 小时
30 天内合并 PR
8

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

aboutcode-org/scancode-toolkit 的其他 Issue

查看 aboutcode-org/scancode-toolkit 的全部 Issue

相似的 Issue

更多 Python Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。