Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
a215023b
Kaydet (Commit)
a215023b
authored
Mar 17, 2011
tarafından
R David Murray
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
#11243: tests and fixes for handling of 'dirty data' in additional methods
üst
4e432682
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
63 additions
and
5 deletions
+63
-5
message.py
Lib/email/message.py
+8
-5
test_email.py
Lib/email/test/test_email.py
+52
-0
NEWS
Misc/NEWS
+3
-0
No files found.
Lib/email/message.py
Dosyayı görüntüle @
a215023b
...
...
@@ -48,9 +48,9 @@ def _sanitize_header(name, value):
def
_splitparam
(
param
):
# Split header parameters. BAW: this may be too simple. It isn't
# strictly RFC 2045 (section 5.1) compliant, but it catches most headers
# found in the wild. We may eventually need a full fledged parser
#
eventually
.
a
,
sep
,
b
=
param
.
partition
(
';'
)
# found in the wild. We may eventually need a full fledged parser
.
#
RDM: we might have a Header here; for now just stringify it
.
a
,
sep
,
b
=
str
(
param
)
.
partition
(
';'
)
if
not
sep
:
return
a
.
strip
(),
None
return
a
.
strip
(),
b
.
strip
()
...
...
@@ -90,6 +90,8 @@ def _formatparam(param, value=None, quote=True):
return
param
def
_parseparam
(
s
):
# RDM This might be a Header, so for now stringify it.
s
=
';'
+
str
(
s
)
plist
=
[]
while
s
[:
1
]
==
';'
:
s
=
s
[
1
:]
...
...
@@ -240,7 +242,8 @@ class Message:
if
i
is
not
None
and
not
isinstance
(
self
.
_payload
,
list
):
raise
TypeError
(
'Expected list, got
%
s'
%
type
(
self
.
_payload
))
payload
=
self
.
_payload
cte
=
self
.
get
(
'content-transfer-encoding'
,
''
)
.
lower
()
# cte might be a Header, so for now stringify it.
cte
=
str
(
self
.
get
(
'content-transfer-encoding'
,
''
))
.
lower
()
# payload may be bytes here.
if
isinstance
(
payload
,
str
):
if
_has_surrogates
(
payload
):
...
...
@@ -561,7 +564,7 @@ class Message:
if
value
is
missing
:
return
failobj
params
=
[]
for
p
in
_parseparam
(
';'
+
value
):
for
p
in
_parseparam
(
value
):
try
:
name
,
val
=
p
.
split
(
'='
,
1
)
name
=
name
.
strip
()
...
...
Lib/email/test/test_email.py
Dosyayı görüntüle @
a215023b
...
...
@@ -2995,6 +2995,58 @@ class Test8BitBytesHandling(unittest.TestCase):
[
'foo@bar.com'
,
'g
\uFFFD\uFFFD
st'
])
def
test_get_content_type_with_8bit
(
self
):
msg
=
email
.
message_from_bytes
(
textwrap
.
dedent
(
"""
\
Content-Type: text/pl
\xA7
in; charset=utf-8
"""
)
.
encode
(
'latin-1'
))
self
.
assertEqual
(
msg
.
get_content_type
(),
"text/pl
\uFFFD
in"
)
self
.
assertEqual
(
msg
.
get_content_maintype
(),
"text"
)
self
.
assertEqual
(
msg
.
get_content_subtype
(),
"pl
\uFFFD
in"
)
def
test_get_params_with_8bit
(
self
):
msg
=
email
.
message_from_bytes
(
'X-Header: foo=
\xa7
ne; b
\xa7
r=two; baz=three
\n
'
.
encode
(
'latin-1'
))
self
.
assertEqual
(
msg
.
get_params
(
header
=
'x-header'
),
[(
'foo'
,
'
\uFFFD
ne'
),
(
'b
\uFFFD
r'
,
'two'
),
(
'baz'
,
'three'
)])
self
.
assertEqual
(
msg
.
get_param
(
'Foo'
,
header
=
'x-header'
),
'
\uFFFd
ne'
)
# XXX: someday you might be able to get 'b\xa7r', for now you can't.
self
.
assertEqual
(
msg
.
get_param
(
'b
\xa7
r'
,
header
=
'x-header'
),
None
)
def
test_get_rfc2231_params_with_8bit
(
self
):
msg
=
email
.
message_from_bytes
(
textwrap
.
dedent
(
"""
\
Content-Type: text/plain; charset=us-ascii;
title*=us-ascii'en'This
%20
is
%20
not
%20
f
\xa7
n"""
)
.
encode
(
'latin-1'
))
self
.
assertEqual
(
msg
.
get_param
(
'title'
),
(
'us-ascii'
,
'en'
,
'This is not f
\uFFFD
n'
))
def
test_set_rfc2231_params_with_8bit
(
self
):
msg
=
email
.
message_from_bytes
(
textwrap
.
dedent
(
"""
\
Content-Type: text/plain; charset=us-ascii;
title*=us-ascii'en'This
%20
is
%20
not
%20
f
\xa7
n"""
)
.
encode
(
'latin-1'
))
msg
.
set_param
(
'title'
,
'test'
)
self
.
assertEqual
(
msg
.
get_param
(
'title'
),
'test'
)
def
test_del_rfc2231_params_with_8bit
(
self
):
msg
=
email
.
message_from_bytes
(
textwrap
.
dedent
(
"""
\
Content-Type: text/plain; charset=us-ascii;
title*=us-ascii'en'This
%20
is
%20
not
%20
f
\xa7
n"""
)
.
encode
(
'latin-1'
))
msg
.
del_param
(
'title'
)
self
.
assertEqual
(
msg
.
get_param
(
'title'
),
None
)
self
.
assertEqual
(
msg
.
get_content_maintype
(),
'text'
)
def
test_get_payload_with_8bit_cte_header
(
self
):
msg
=
email
.
message_from_bytes
(
textwrap
.
dedent
(
"""
\
Content-Transfer-Encoding: b
\xa7
se64
Content-Type: text/plain; charset=latin-1
payload
"""
)
.
encode
(
'latin-1'
))
self
.
assertEqual
(
msg
.
get_payload
(),
'payload
\n
'
)
self
.
assertEqual
(
msg
.
get_payload
(
decode
=
True
),
b
'payload
\n
'
)
non_latin_bin_msg
=
textwrap
.
dedent
(
"""
\
From: foo@bar.com
To: báz
...
...
Misc/NEWS
Dosyayı görüntüle @
a215023b
...
...
@@ -40,6 +40,9 @@ Core and Builtins
Library
-------
-
Issue
#
11243
:
fix
the
parameter
querying
methods
of
Message
to
work
if
the
headers
contain
un
-
encoded
non
-
ASCII
data
.
-
Issue
#
11401
:
fix
handling
of
headers
with
no
value
;
this
fixes
a
regression
relative
to
Python2
and
the
result
is
now
the
same
as
it
was
in
Python2
.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment