scancode aborts when encountering a broken RPM archive

オープン 初心者向け
#5,407 コメント 1 件 リアクション 0 件 担当者 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時間
マージ済み PR(30日)
8

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

aboutcode-org/scancode-toolkit のほかの issue

aboutcode-org/scancode-toolkit の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。