From 183049ef2ef591108b358e7f6c1ca3be295b3344 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sat, 16 May 2015 22:48:13 +0200 Subject: [PATCH] Make sure self._opened is reset on exceptions. --- qutebrowser/misc/lineparser.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/qutebrowser/misc/lineparser.py b/qutebrowser/misc/lineparser.py index c34760217..4a5e1f3ff 100644 --- a/qutebrowser/misc/lineparser.py +++ b/qutebrowser/misc/lineparser.py @@ -94,13 +94,15 @@ class BaseLineParser(QObject): if self._opened: raise IOError("Refusing to double-open AppendLineParser.") self._opened = True - if self._binary: - with open(self._configfile, mode + 'b') as f: - yield f - else: - with open(self._configfile, mode, encoding='utf-8') as f: - yield f - self._opened = False + try: + if self._binary: + with open(self._configfile, mode + 'b') as f: + yield f + else: + with open(self._configfile, mode, encoding='utf-8') as f: + yield f + finally: + self._opened = False def _write(self, fp, data): """Write the data to a file. @@ -223,10 +225,12 @@ class LineParser(BaseLineParser): if not do_save: return self._opened = True - assert self._configfile is not None - with qtutils.savefile_open(self._configfile, self._binary) as f: - self._write(f, self.data) - self._opened = False + try: + assert self._configfile is not None + with qtutils.savefile_open(self._configfile, self._binary) as f: + self._write(f, self.data) + finally: + self._opened = False class LimitLineParser(LineParser):