python / python/cpython

incorrect "http.cookiejar bug" when catching exception

オープン
#99,453 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

stdlib type-bug
主要言語
Python
スター
77.2k
フォーク
36k
PR マージ指標
PR 指標を取得中

説明

Bug report

catching certain exceptions from the http.cookiejar module incorrectly triggers an "unhandled exception" warning:

#!/usr/bin/env python3

import logging
from http.cookiejar import LoadError, MozillaCookieJar
from tempfile import NamedTemporaryFile

logging.basicConfig()
log = logging.getLogger()

with NamedTemporaryFile(mode="w") as tmp:
    tmp.write("# Netscape HTTP Cookie File\n%3D\n")
    tmp.seek(0)
    jar = MozillaCookieJar(tmp.name)

    try:
        jar.load()
    except LoadError:
        log.warning("Failed to load cookies")
alexia@cadoth ~ > ./http_cookiejar_bug.py  
/home/alexia/.local/share/pyenv/versions/3.11.0/lib/python3.11/http/cookiejar.py:2080: UserWarning: http.cookiejar bug!
Traceback (most recent call last):
  File "/home/alexia/.local/share/pyenv/versions/3.11.0/lib/python3.11/http/cookiejar.py", line 2041, in _really_load
    domain, domain_specified, path, secure, expires, name, value = \
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ValueError: not enough values to unpack (expected 7, got 1)

  _warn_unhandled_exception()
WARNING:root:Failed to load cookies

Your environment

  • CPython versions tested on: 3.9.2, 3.10.8, 3.11.0
  • Operating system and architecture: Debian 11 amd64
Linked PRs
  • gh-99676
  • gh-139395

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

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

調査の方向性

Lib/http/cookiejar.py の _really_load と _warn_unhandled_exception から始め、issue の reproducer を使って、LoadError を捕捉したときに警告が出ることを確認します。関連する PR gh-99676 と gh-139395 を確認し、そのうえで、この処理済みの不正な Cookie のケースでは誤った警告が出なくなったことを示す回帰テストを追加または更新します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
networking
issue の種類
バグ
難易度
2/5
見積もり時間
1〜3時間
活発さ
停滞
明瞭さ
明確に書かれている
初心者へのやさしさ
35/100

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

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