From 5157ed047945aef5ee1116ce2737c649cbe28a3d Mon Sep 17 00:00:00 2001 From: Mark Kendall Date: Wed, 12 Feb 2020 12:11:14 +0000 Subject: [PATCH] MythDRMDevice: Guard against invalid devices --- mythtv/libs/libmythui/platforms/mythdisplaydrm.cpp | 12 ++++++++++++ mythtv/libs/libmythui/platforms/mythdrmdevice.cpp | 6 ++++++ mythtv/libs/libmythui/platforms/mythdrmdevice.h | 2 ++ 3 files changed, 20 insertions(+) diff --git a/mythtv/libs/libmythui/platforms/mythdisplaydrm.cpp b/mythtv/libs/libmythui/platforms/mythdisplaydrm.cpp index 57880c97741..66fd2cc6955 100644 --- a/mythtv/libs/libmythui/platforms/mythdisplaydrm.cpp +++ b/mythtv/libs/libmythui/platforms/mythdisplaydrm.cpp @@ -8,6 +8,11 @@ MythDisplayDRM::MythDisplayDRM() : MythDisplay() { m_device = new MythDRMDevice(m_screen); + if (!m_device->IsValid()) + { + delete m_device; + m_device = nullptr; + } Initialise(); } @@ -27,7 +32,14 @@ void MythDisplayDRM::ScreenChanged(QScreen *qScreen) } if (!m_device) + { m_device = new MythDRMDevice(m_screen); + if (!m_device->IsValid()) + { + delete m_device; + m_device = nullptr; + } + } } void MythDisplayDRM::UpdateCurrentMode(void) diff --git a/mythtv/libs/libmythui/platforms/mythdrmdevice.cpp b/mythtv/libs/libmythui/platforms/mythdrmdevice.cpp index 5aa94aae4cc..b2a9d25d342 100644 --- a/mythtv/libs/libmythui/platforms/mythdrmdevice.cpp +++ b/mythtv/libs/libmythui/platforms/mythdrmdevice.cpp @@ -26,6 +26,7 @@ MythDRMDevice::MythDRMDevice(QScreen *qScreen, const QString& Device) return; } + m_valid = true; Authenticate(); if (m_authenticated) LOG(VB_GENERAL, m_verbose, LOC + "Authenticated"); @@ -76,6 +77,11 @@ void MythDRMDevice::Close(void) m_fd = 0; } +bool MythDRMDevice::IsValid(void) const +{ + return m_valid; +} + QString MythDRMDevice::GetSerialNumber(void) const { return m_serialNumber; diff --git a/mythtv/libs/libmythui/platforms/mythdrmdevice.h b/mythtv/libs/libmythui/platforms/mythdrmdevice.h index eb72fd0ec4b..7ab0c374ead 100644 --- a/mythtv/libs/libmythui/platforms/mythdrmdevice.h +++ b/mythtv/libs/libmythui/platforms/mythdrmdevice.h @@ -21,6 +21,7 @@ class MythDRMDevice : public ReferenceCounter explicit MythDRMDevice(QScreen *qScreen, const QString& Device = QString()); ~MythDRMDevice() override; + bool IsValid (void) const; QString GetSerialNumber(void) const; QScreen* GetScreen (void) const; QSize GetResolution (void) const; @@ -42,6 +43,7 @@ class MythDRMDevice : public ReferenceCounter drmModePropertyBlobPtr GetBlobProperty(drmModeConnectorPtr Connector, const QString& Property); private: + bool m_valid { false }; QScreen* m_screen { nullptr }; QString m_deviceName { }; int m_fd { -1 };