From bf4d6a570786ea22a518c11ca1ce7622e7534a71 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 26 Dec 2014 15:07:18 +0100 Subject: [PATCH] Handle an invalid cwd properly. Fixes #370. --- qutebrowser/app.py | 2 +- qutebrowser/misc/ipc.py | 12 +++++++++--- qutebrowser/utils/urlutils.py | 7 +++++-- qutebrowser/utils/version.py | 2 +- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/qutebrowser/app.py b/qutebrowser/app.py index b968f20cc..826631e4d 100644 --- a/qutebrowser/app.py +++ b/qutebrowser/app.py @@ -598,9 +598,9 @@ class Application(QApplication): log.destroy.debug("sys.path: {}".format(sys.path)) log.destroy.debug("sys.argv: {}".format(sys.argv)) log.destroy.debug("frozen: {}".format(hasattr(sys, 'frozen'))) - args, cwd = self._get_restart_args(pages) # Open a new process and immediately shutdown the existing one try: + args, cwd = self._get_restart_args(pages) if cwd is None: subprocess.Popen(args) else: diff --git a/qutebrowser/misc/ipc.py b/qutebrowser/misc/ipc.py index 8b49fe937..7c5da7bdb 100644 --- a/qutebrowser/misc/ipc.py +++ b/qutebrowser/misc/ipc.py @@ -152,11 +152,11 @@ class IPCServer(QObject): return try: args = json_data['args'] - cwd = json_data['cwd'] except KeyError: log.ipc.error("Ignoring invalid IPC data.") - log.ipc.debug("no args/cwd: {}".format(decoded.strip())) + log.ipc.debug("no args: {}".format(decoded.strip())) return + cwd = json_data.get('cwd', None) app = objreg.get('app') app.process_args(args, via_ipc=True, cwd=cwd) @@ -211,7 +211,13 @@ def send_to_running_instance(cmdlist): connected = socket.waitForConnected(100) if connected: log.ipc.info("Opening in existing instance") - json_data = {'args': cmdlist, 'cwd': os.getcwd()} + json_data = {'args': cmdlist} + try: + cwd = os.getcwd() + except OSError: + pass + else: + json_data['cwd'] = cwd line = json.dumps(json_data) + '\n' data = line.encode('utf-8') log.ipc.debug("Writing: {}".format(data)) diff --git a/qutebrowser/utils/urlutils.py b/qutebrowser/utils/urlutils.py index f0d5d437a..3c6598f6e 100644 --- a/qutebrowser/utils/urlutils.py +++ b/qutebrowser/utils/urlutils.py @@ -136,9 +136,12 @@ def fuzzy_url(urlstr, cwd=None): if cwd: path = os.path.join(cwd, os.path.expanduser(urlstr)) else: - path = os.path.abspath(os.path.expanduser(urlstr)) + try: + path = os.path.abspath(os.path.expanduser(urlstr)) + except OSError: + path = None stripped = urlstr.strip() - if os.path.exists(path): + if path is not None and os.path.exists(path): log.url.debug("URL is a local file") url = QUrl.fromLocalFile(path) elif is_url(stripped): diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index e1e73f20b..b0f818bab 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -64,7 +64,7 @@ def _git_str(): try: gitpath = os.path.join(os.path.dirname(os.path.realpath(__file__)), os.path.pardir, os.path.pardir) - except NameError: + except (NameError, OSError): log.misc.exception("Error while getting git path") else: commit = _git_str_subprocess(gitpath)