[Python-checkins] cpython (3.5): Issue #15068: Avoid creating a reference loop in fileinput.
serhiy.storchaka
python-checkins at python.org
Tue Mar 8 16:36:47 EST 2016
https://hg.python.org/cpython/rev/a0de41b46aa6
changeset: 100475:a0de41b46aa6
branch: 3.5
parent: 100472:1725d310e445
user: Serhiy Storchaka <storchaka at gmail.com>
date: Tue Mar 08 23:35:35 2016 +0200
summary:
Issue #15068: Avoid creating a reference loop in fileinput.
files:
Lib/fileinput.py | 28 +++++++++++++++-------------
1 files changed, 15 insertions(+), 13 deletions(-)
diff --git a/Lib/fileinput.py b/Lib/fileinput.py
--- a/Lib/fileinput.py
+++ b/Lib/fileinput.py
@@ -207,7 +207,6 @@
self._startlineno = 0
self._filelineno = 0
self._file = None
- self._readline = self._start_readline
self._isstdin = False
self._backupfilename = None
# restrict mode argument to reading modes
@@ -245,15 +244,15 @@
return self
def __next__(self):
- line = self._readline()
- if line:
- self._filelineno += 1
- return line
- if not self._file:
- raise StopIteration
- self.nextfile()
- # Recursive call
- return self.__next__()
+ while True:
+ line = self._readline()
+ if line:
+ self._filelineno += 1
+ return line
+ if not self._file:
+ raise StopIteration
+ self.nextfile()
+ # repeat with next file
def __getitem__(self, i):
if i != self.lineno():
@@ -277,7 +276,10 @@
finally:
file = self._file
self._file = None
- self._readline = self._start_readline
+ try:
+ del self._readline # restore FileInput._readline
+ except AttributeError:
+ pass
try:
if file and not self._isstdin:
file.close()
@@ -301,7 +303,7 @@
self.nextfile()
# repeat with next file
- def _start_readline(self):
+ def _readline(self):
if not self._files:
if 'b' in self._mode:
return b''
@@ -356,7 +358,7 @@
self._file = self._openhook(self._filename, self._mode)
else:
self._file = open(self._filename, self._mode)
- self._readline = self._file.readline
+ self._readline = self._file.readline # hide FileInput._readline
return self._readline()
def filename(self):
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list