python / python/cpython

email: multiline encoded headers

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

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

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

説明

Bug report

There seems to be a problem with multiline encoded headers, for example subject headers.

from email import message_from_string, policy
import base64

e = """From: <test@test.com>
To: <test@test.com>
Subject: =?UTF-8?B?0JfQsNGB0YLRgNCw0YXQvtCy0LrQsCAi0JDQu9C40LDQvdGGINCX0LTRgNCw0LLQ?=
 =?UTF-8?B?tSIg4oCTINCY0L3QtNC40LLQuNC00YPQsNC70LXQvSDQvdC+0LzQtdGAINC90LAg?=
 =?UTF-8?B?0YPQstC10LTQvtC80LvQtdC90LjQtQ==?=

test"""

e = message_from_string(e, policy=policy.default)

s1 = e["Subject"]

try:
    e.as_bytes()
except Exception:
    print("error")
else:
    print("ok")

s = (base64.b64decode("0JfQsNGB0YLRgNCw0YXQvtCy0LrQsCAi0JDQu9C40LDQvdGGINCX0LTRgNCw0LLQ") + base64.b64decode("tSIg4oCTINCY0L3QtNC40LLQuNC00YPQsNC70LXQvSDQvdC+0LzQtdGAINC90LAg")
    + base64.b64decode("0YPQstC10LTQvtC80LvQtdC90LjQtQ==")).decode("utf-8")

del e["Subject"]
e["Subject"] = s

s2 = e["Subject"]

try:
    e.as_bytes()
except Exception:
    print("error")
else:
    print("ok")

print(s1 == s2)

e = """From: <test@test.com>
To: <test@test.com>
Subject: =?UTF-8?B?0JfQsNGB0YLRgNCw0YXQvtCy0LrQsCAi0JDQu9C40LDQvdGGINCX0LTRgNCw0LLQtSIg4oCTINCY0L3QtNC40LLQuNC00YPQsNC70LXQvSDQvdC+0LzQtdGAINC90LAg0YPQstC10LTQvtC80LvQtdC90LjQtQ==?=

test"""

e = message_from_string(e, policy=policy.default)

s3 = e["Subject"]

try:
    e.as_bytes()
except Exception:
    print("error")
else:
    print("ok")

print(s2 == s3)

Your environment

Tested on Python 3.10.4 and 3.11.0a7 on Arch Linux

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

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

はじめの一歩

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

調査の方向性

提供された再現コードを、Python の email.message_from_string、policy.default、as_bytes の各エントリポイントで実行します。シリアライズの失敗を含めて s1、s2、s3 を比較し、その後、折り返されたエンコード済み Subject ヘッダーを email パッケージがどのように処理するかを追跡します。複数行と単一行のエンコード済みヘッダーがエラーなく一貫して動作し、デコードされた値が一致すれば完了です。

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

評価

技術スタック
python
領域
backend
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
42/100

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

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