Skip to content

Commit d9bf7f4

Browse files
authored
[2.7] bpo-36149 Fix potential use of uninitialized memory in cPickle (#12105)
Fix off-by-one bug in cPickle that caused it to use uninitialised memory on truncated pickles read from FILE*s.
1 parent 84b5ac9 commit d9bf7f4

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Fix use of uninitialized memory in cPickle when reading a truncated pickle
2+
from a file object.

Modules/cPickle.c

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -586,12 +586,15 @@ readline_file(Unpicklerobject *self, char **s)
586586
while (1) {
587587
Py_ssize_t bigger;
588588
char *newbuf;
589-
for (; i < (self->buf_size - 1); i++) {
590-
if (feof(self->fp) ||
591-
(self->buf[i] = getc(self->fp)) == '\n') {
592-
self->buf[i + 1] = '\0';
589+
while (i < (self->buf_size - 1)) {
590+
int newchar = getc(self->fp);
591+
if (newchar != EOF) {
592+
self->buf[i++] = newchar;
593+
}
594+
if (newchar == EOF || newchar == '\n') {
595+
self->buf[i] = '\0';
593596
*s = self->buf;
594-
return i + 1;
597+
return i;
595598
}
596599
}
597600
if (self->buf_size > (PY_SSIZE_T_MAX >> 1)) {

0 commit comments

Comments
 (0)