Skip to content

Mirror fallback: ClientPayloadError when json-mirror drops connection mid-download (no graceful fallback to json-nvd) #5629

@Chetan-code-lrca

Description

@Chetan-code-lrca

Environment

  • OS: Windows 11
  • Python: 3.14.3
  • cve-bin-tool: 3.4
  • aiohttp: 3.13.3

Steps to reproduce

pip install cve-bin-tool # installs under Python 3.14
cve-bin-tool --input-file requirements.txt

Expected

CVE database downloads successfully

Actual

Crashes at ~67% with:
ClientPayloadError: Response payload is not completed:
<ContentLengthError: 400, message='Not enough data to satisfy content length header.'>

Full traceback

C:\Users\cheta\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\aiohttp\client_proto.py:144 in connection_lost
C:\Users\cheta\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\cve_bin_tool\cli.py:891 in main
C:\Users\cheta\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\cve_bin_tool\cvedb.py:316 in get_cvelist_if_stale
C:\Users\cheta\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\cve_bin_tool\cvedb.py:299 in refresh_cache_and_update_db
C:\Users\cheta\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\cve_bin_tool\async_utils.py:90 in run_coroutine
C:\Users\cheta\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\cve_bin_tool\cvedb.py:293 in refresh
C:\Users\cheta\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\cve_bin_tool\data_sources\nvd_source.py:100 in get_cve_data
C:\Users\cheta\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\cve_bin_tool\data_sources\nvd_source.py:418 in fetch_cves
C:\Users\cheta\AppData\Local\Python\pythoncore-3.14-64\Lib\site-packages\cve_bin_tool\data_sources\nvd_source.py:541 in cache_update

ContentLengthError: 400, message='Not enough data to satisfy content length header.'
ClientPayloadError: Response payload is not completed: <ContentLengthError: 400, message='Not enough data to satisfy content length header.'>

Root cause hypothesis

aiohttp's async HTTP parser behavior changed in Python 3.14.
The ContentLengthError originates in aiohttp/client_proto.py:144
during connection_lost, suggesting the asyncio event loop
integration has a breaking change in 3.14.
Same aiohttp version (3.13.3) works correctly under Python 3.11.

Workaround

Install and run under Python 3.11.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions