From 1a1db4d1f804ca724218b3bb9e00d0ad7b1ed34a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 11 Jun 2019 16:35:29 +0530 Subject: [PATCH] Ensure no trailing NULLs in result of file_association() --- src/calibre/utils/windows/wintest.py | 4 +++- src/calibre/utils/windows/winutilpp.cpp | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/calibre/utils/windows/wintest.py b/src/calibre/utils/windows/wintest.py index 8a0c0521d5..aad2c7b5dc 100644 --- a/src/calibre/utils/windows/wintest.py +++ b/src/calibre/utils/windows/wintest.py @@ -24,7 +24,9 @@ class TestWinutil(unittest.TestCase): self.winutil.add_to_recent_docs(path, 'some-app-uid') def test_file_association(self): - self.assertIn('notepad.exe', self.winutil.file_association('.txt')) + q = self.winutil.file_association('.txt') + self.assertIn('notepad.exe', q.lower()) + self.assertNotIn('\0', q) self.assertIsNone(self.winutil.file_association('.mkjsfks')) def test_special_folder_path(self): diff --git a/src/calibre/utils/windows/winutilpp.cpp b/src/calibre/utils/windows/winutilpp.cpp index 741804e0d5..5cee908e76 100644 --- a/src/calibre/utils/windows/winutilpp.cpp +++ b/src/calibre/utils/windows/winutilpp.cpp @@ -68,8 +68,8 @@ file_association(PyObject *self, PyObject *args) { if (!PyArg_ParseTuple(args, "O&", py_to_wchar, &ext)) return NULL; HRESULT hr = AssocQueryStringW(0, ASSOCSTR_EXECUTABLE, ext, NULL, buf, &sz); free_wchar_buffer(&ext); - if (!SUCCEEDED(hr)) Py_RETURN_NONE; - return Py_BuildValue("u#", buf, (int)sz); + if (!SUCCEEDED(hr) || sz < 1) Py_RETURN_NONE; + return Py_BuildValue("u", buf); } PyObject *