From 948786c9295de3ec8536d8ec6ec7dd45b3f66184 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere Date: Mon, 23 Sep 2019 20:36:46 +0000 Subject: File::SetDescriptor() should require options lvm_private::File::GetStream() can fail if m_options == 0 It's not clear from the header a File created with a descriptor will be not be usable by many parts of LLDB unless SetOptions is also called, but it is. This is because those parts of LLDB rely on GetStream() to use the file, and that in turn relies on calling fdopen on the descriptor. When calling fdopen, GetStream relies on m_options to determine the access mode. If m_options has never been set, GetStream() will fail. This patch adds options as a required argument to File::SetDescriptor and the corresponding constructor. Patch by: Lawrence D'Anna Differential revision: https://reviews.llvm.org/D67792 llvm-svn: 372652 --- lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp') diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp index 29dd037..97f8388 100644 --- a/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp +++ b/lldb/source/Plugins/ScriptInterpreter/Python/PythonDataObjects.cpp @@ -1043,9 +1043,9 @@ bool PythonFile::GetUnderlyingFile(File &file) const { file.Close(); // We don't own the file descriptor returned by this function, make sure the // File object knows about that. - file.SetDescriptor(PyObject_AsFileDescriptor(m_py_obj), false); PythonString py_mode = GetAttributeValue("mode").AsType(); - file.SetOptions(PythonFile::GetOptionsFromMode(py_mode.GetString())); + auto options = PythonFile::GetOptionsFromMode(py_mode.GetString()); + file.SetDescriptor(PyObject_AsFileDescriptor(m_py_obj), options, false); return file.IsValid(); } -- cgit v1.1