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
55549ec4
Kaydet (Commit)
55549ec4
authored
Agu 29, 2011
tarafından
Antoine Pitrou
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Issue #12847: Fix a crash with negative PUT and LONG_BINPUT arguments in
the C pickle implementation.
üst
82be19f8
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
31 additions
and
1 deletion
+31
-1
pickle.py
Lib/pickle.py
+6
-0
pickletester.py
Lib/test/pickletester.py
+12
-0
NEWS
Misc/NEWS
+3
-0
_pickle.c
Modules/_pickle.c
+10
-1
No files found.
Lib/pickle.py
Dosyayı görüntüle @
55549ec4
...
...
@@ -1156,16 +1156,22 @@ class _Unpickler:
def
load_put
(
self
):
i
=
int
(
self
.
readline
()[:
-
1
])
if
i
<
0
:
raise
ValueError
(
"negative PUT argument"
)
self
.
memo
[
i
]
=
self
.
stack
[
-
1
]
dispatch
[
PUT
[
0
]]
=
load_put
def
load_binput
(
self
):
i
=
self
.
read
(
1
)[
0
]
if
i
<
0
:
raise
ValueError
(
"negative BINPUT argument"
)
self
.
memo
[
i
]
=
self
.
stack
[
-
1
]
dispatch
[
BINPUT
[
0
]]
=
load_binput
def
load_long_binput
(
self
):
i
=
mloads
(
b
'i'
+
self
.
read
(
4
))
if
i
<
0
:
raise
ValueError
(
"negative LONG_BINPUT argument"
)
self
.
memo
[
i
]
=
self
.
stack
[
-
1
]
dispatch
[
LONG_BINPUT
[
0
]]
=
load_long_binput
...
...
Lib/test/pickletester.py
Dosyayı görüntüle @
55549ec4
...
...
@@ -1121,6 +1121,18 @@ class AbstractPickleTests(unittest.TestCase):
# On 32-bit builds, a BINUNICODE of 2**31 or more is refused
self
.
check_negative_32b_binXXX
(
b
'
\x80\x03
X
\xff\xff\xff\xff
xyzq
\x00
.'
)
def
test_negative_put
(
self
):
# Issue #12847
dumped
=
b
'Va
\n
p-1
\n
.'
self
.
assertRaises
(
ValueError
,
self
.
loads
,
dumped
)
def
test_negative_32b_binput
(
self
):
# Issue #12847
if
sys
.
maxsize
>
2
**
32
:
self
.
skipTest
(
"test is only meaningful on 32-bit builds"
)
dumped
=
b
'
\x80\x03
X
\x01\x00\x00\x00
ar
\xff\xff\xff\xff
.'
self
.
assertRaises
(
ValueError
,
self
.
loads
,
dumped
)
class
BigmemPickleTests
(
unittest
.
TestCase
):
...
...
Misc/NEWS
Dosyayı görüntüle @
55549ec4
...
...
@@ -22,6 +22,9 @@ Core and Builtins
Library
-------
- Issue #12847: Fix a crash with negative PUT and LONG_BINPUT arguments in
the C pickle implementation.
- Issue #11564: Avoid crashes when trying to pickle huge objects or containers
(more than 2**31 items). Instead, in most cases, an OverflowError is raised.
...
...
Modules/_pickle.c
Dosyayı görüntüle @
55549ec4
...
...
@@ -4853,8 +4853,12 @@ load_put(UnpicklerObject *self)
return
-
1
;
idx
=
PyLong_AsSsize_t
(
key
);
Py_DECREF
(
key
);
if
(
idx
==
-
1
&&
PyErr_Occurred
())
if
(
idx
<
0
)
{
if
(
!
PyErr_Occurred
())
PyErr_SetString
(
PyExc_ValueError
,
"negative PUT argument"
);
return
-
1
;
}
return
_Unpickler_MemoPut
(
self
,
idx
,
value
);
}
...
...
@@ -4893,6 +4897,11 @@ load_long_binput(UnpicklerObject *self)
value
=
self
->
stack
->
data
[
Py_SIZE
(
self
->
stack
)
-
1
];
idx
=
calc_binsize
(
s
,
4
);
if
(
idx
<
0
)
{
PyErr_SetString
(
PyExc_ValueError
,
"negative LONG_BINPUT argument"
);
return
-
1
;
}
return
_Unpickler_MemoPut
(
self
,
idx
,
value
);
}
...
...
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