[libraries/mpvqt] src: mpvcontroller, mpvrenderer: check for nullptrs and add debug logs

George Florea Bănuș <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit dc4c22f39762f7fa0d66de9e29b15fab1bec92ce by George Florea Bănuș.
Committed on 25/07/2026 at 20:51.
Pushed by georgefb into branch 'master'.

mpvcontroller, mpvrenderer: check for nullptrs and add debug logs

M  +53   -18   src/mpvcontroller.cpp
M  +3    -2    src/mpvrenderer.cpp

https://invent.kde.org/libraries/mpvqt/-/commit/dc4c22f39762f7fa0d66de9e29b15fab1bec92ce

diff --git a/src/mpvcontroller.cpp b/src/mpvcontroller.cpp
index 6cc6983..76a564d 100644
--- a/src/mpvcontroller.cpp
+++ b/src/mpvcontroller.cpp
@@ -24,19 +24,22 @@ mpv_node_list *MpvControllerPrivate::createList(mpv_node *dst, bool is_map, int
 {
     dst->format = is_map ? MPV_FORMAT_NODE_MAP : MPV_FORMAT_NODE_ARRAY;
     mpv_node_list *list = new mpv_node_list();
-    dst->u.list = list;
-    if (!list) {
+    if (list == nullptr) {
+        qCDebug(MpvQt_MpvController) << "createList: list is nullptr";
         freeNode(dst);
         return nullptr;
     }
+    dst->u.list = list;
     list->values = new mpv_node[num]();
-    if (!list->values) {
+    if (list->values == nullptr) {
+        qCDebug(MpvQt_MpvController) << "createList: list->values is nullptr";
         freeNode(dst);
         return nullptr;
     }
     if (is_map) {
         list->keys = new char *[num]();
-        if (!list->keys) {
+        if (list->keys == nullptr) {
+            qCDebug(MpvQt_MpvController) << "createList: list->keys is nullptr";
             freeNode(dst);
             return nullptr;
         }
@@ -64,7 +67,8 @@ void MpvControllerPrivate::setNode(mpv_node *dst, const QVariant &src)
     } else if (src.canConvert<QVariantList>()) {
         QVariantList qlist = src.toList();
         mpv_node_list *list = createList(dst, false, qlist.size());
-        if (!list) {
+        if (list == nullptr) {
+            qCDebug(MpvQt_MpvController) << "setNode QVariantList: list is nullptr";
             dst->format = MPV_FORMAT_NONE;
             return;
         }
@@ -75,7 +79,8 @@ void MpvControllerPrivate::setNode(mpv_node *dst, const QVariant &src)
     } else if (src.canConvert<QVariantMap>()) {
         QVariantMap qmap = src.toMap();
         mpv_node_list *list = createList(dst, true, qmap.size());
-        if (!list) {
+        if (list == nullptr) {
+            qCDebug(MpvQt_MpvController) << "setNode QVariantMap: list is nullptr";
             dst->format = MPV_FORMAT_NONE;
             return;
         }
@@ -83,7 +88,8 @@ void MpvControllerPrivate::setNode(mpv_node *dst, const QVariant &src)
         int n = 0;
         for (auto it = qmap.constKeyValueBegin(); it != qmap.constKeyValueEnd(); ++it) {
             list->keys[n] = qstrdup(it.operator*().first.toUtf8().data());
-            if (!list->keys[n]) {
+            if (list->keys[n] == nullptr) {
+                qCDebug(MpvQt_MpvController) << "setNode QVariantMap: list->keys[n] is nullptr";
                 freeNode(dst);
                 dst->format = MPV_FORMAT_NONE;
                 return;
@@ -99,9 +105,6 @@ void MpvControllerPrivate::setNode(mpv_node *dst, const QVariant &src)
 
 bool MpvControllerPrivate::testType(const QVariant &v, QMetaType::Type t)
 {
-    // The Qt docs say: "Although this function is declared as returning
-    // QVariant::Type(obsolete), the return value should be interpreted
-    // as QMetaType::Type." So a cast is needed to avoid warnings.
     return v.typeId() == t;
 }
 
@@ -147,6 +150,10 @@ inline QVariant MpvControllerPrivate::nodeToVariant(const mpv_node *node)
         return QVariant(node->u.double_);
     case MPV_FORMAT_NODE_ARRAY: {
         mpv_node_list *list = node->u.list;
+        if (list == nullptr) {
+            qCDebug(MpvQt_MpvController) << "nodeToVariant MPV_FORMAT_NODE_ARRAY: list is nullptr";
+            return {};
+        }
         QVariantList qlist;
         for (int n = 0; n < list->num; ++n) {
             qlist.append(nodeToVariant(&list->values[n]));
@@ -155,6 +162,10 @@ inline QVariant MpvControllerPrivate::nodeToVariant(const mpv_node *node)
     }
     case MPV_FORMAT_NODE_MAP: {
         mpv_node_list *list = node->u.list;
+        if (list == nullptr) {
+            qCDebug(MpvQt_MpvController) << "nodeToVariant MPV_FORMAT_NODE_MAP: list is nullptr";
+            return {};
+        }
         QVariantMap qmap;
         for (int n = 0; n < list->num; ++n) {
             qmap.insert(QString::fromUtf8(list->keys[n]), nodeToVariant(&list->values[n]));
@@ -186,7 +197,7 @@ void MpvController::init()
     std::setlocale(LC_NUMERIC, "C");
 
     d_ptr->m_mpv = mpv_create();
-    if (!d_ptr->m_mpv) {
+    if (d_ptr->m_mpv == nullptr) {
         qFatal("could not create mpv context");
     }
     if (mpv_initialize(d_ptr->m_mpv) < 0) {
@@ -205,6 +216,10 @@ void MpvController::init()
 
 void MpvController::mpvEvents(void *ctx)
 {
+    if (ctx == nullptr) {
+        qCDebug(MpvQt_MpvController) << "mpvEvents: ctx is nullptr";
+        return;
+    }
     QMetaObject::invokeMethod(static_cast<MpvController *>(ctx), &MpvController::eventHandler, Qt::QueuedConnection);
 }
 
@@ -212,6 +227,10 @@ void MpvController::eventHandler()
 {
     while (d_ptr->m_mpv) {
         mpv_event *event = mpv_wait_event(d_ptr->m_mpv, 0);
+        if (event == nullptr) {
+            qCDebug(MpvQt_MpvController) << "eventHandler: event is nullptr";
+            continue;
+        }
         if (event->event_id == MPV_EVENT_NONE) {
             break;
         }
@@ -227,7 +246,11 @@ void MpvController::eventHandler()
         }
 
         case MPV_EVENT_END_FILE: {
-            auto prop = static_cast<mpv_event_end_file *>(event->data);
+            const auto *prop = static_cast<mpv_event_end_file *>(event->data);
+            if (prop == nullptr) {
+                qCDebug(MpvQt_MpvController) << "eventHandler MPV_EVENT_END_FILE: prop is nullptr";
+                continue;
+            }
             if (prop->reason == MPV_END_FILE_REASON_EOF) {
                 Q_EMIT endFile(QStringLiteral("eof"));
             } else if (prop->reason == MPV_END_FILE_REASON_STOP) {
@@ -244,8 +267,12 @@ void MpvController::eventHandler()
         }
 
         case MPV_EVENT_GET_PROPERTY_REPLY: {
-            mpv_event_property *prop = static_cast<mpv_event_property *>(event->data);
-            auto data = d_ptr->nodeToVariant(reinterpret_cast<mpv_node *>(prop->data));
+            const mpv_event_property *prop = static_cast<mpv_event_property *>(event->data);
+            if (prop == nullptr) {
+                qCDebug(MpvQt_MpvController) << "eventHandler MPV_EVENT_GET_PROPERTY_REPLY: prop is nullptr";
+                continue;
+            }
+            const auto data = d_ptr->nodeToVariant(reinterpret_cast<mpv_node *>(prop->data));
             Q_EMIT asyncReply(data, {*event});
             break;
         }
@@ -257,13 +284,21 @@ void MpvController::eventHandler()
 
         case MPV_EVENT_COMMAND_REPLY: {
             mpv_event_property *prop = static_cast<mpv_event_property *>(event->data);
+            if (prop == nullptr) {
+                qCDebug(MpvQt_MpvController) << "eventHandler MPV_EVENT_COMMAND_REPLY: prop is nullptr";
+                continue;
+            }
             auto data = d_ptr->nodeToVariant(reinterpret_cast<mpv_node *>(prop));
             Q_EMIT asyncReply(data, {*event});
             break;
         }
 
         case MPV_EVENT_PROPERTY_CHANGE: {
-            mpv_event_property *prop = static_cast<mpv_event_property *>(event->data);
+            const mpv_event_property *prop = static_cast<mpv_event_property *>(event->data);
+            if (prop == nullptr) {
+                qCDebug(MpvQt_MpvController) << "eventHandler MPV_EVENT_PROPERTY_CHANGE: prop is nullptr";
+                continue;
+            }
             QVariant data;
             switch (prop->format) {
             case MPV_FORMAT_DOUBLE:
@@ -297,7 +332,7 @@ void MpvController::eventHandler()
         case MPV_EVENT_LOG_MESSAGE: {
             mpv_event_log_message *logMessageEvent = static_cast<mpv_event_log_message *>(event->data);
             if (logMessageEvent == nullptr) {
-                qDebug() << "MpvController::eventHandler MPV_EVENT_LOG_MESSAGE: logMessageEvent is nullptr";
+                qCDebug(MpvQt_MpvController) << "eventHandler MPV_EVENT_LOG_MESSAGE: logMessageEvent is nullptr";
                 break;
             }
             Q_EMIT logMessage(QString::fromUtf8(logMessageEvent->prefix), QString::fromUtf8(logMessageEvent->level), QString::fromUtf8(logMessageEvent->text));
@@ -306,7 +341,7 @@ void MpvController::eventHandler()
         case MPV_EVENT_CLIENT_MESSAGE: {
             mpv_event_client_message *clientMessageEvent = static_cast<mpv_event_client_message *>(event->data);
             if (clientMessageEvent == nullptr) {
-                qDebug() << "MpvController::eventHandler MPV_EVENT_CLIENT_MESSAGE: clientMessageEvent is nullptr";
+                qCDebug(MpvQt_MpvController) << "eventHandler MPV_EVENT_CLIENT_MESSAGE: clientMessageEvent is nullptr";
                 break;
             }
             QStringList args;
@@ -331,7 +366,7 @@ void MpvController::eventHandler()
         case MPV_EVENT_HOOK: {
             mpv_event_hook *hookEvent = static_cast<mpv_event_hook *>(event->data);
             if (hookEvent == nullptr) {
-                qDebug() << "MpvController::eventHandler MPV_EVENT_HOOK: hookEvent is nullptr";
+                qCDebug(MpvQt_MpvController) << "eventHandler MPV_EVENT_HOOK: hookEvent is nullptr";
                 break;
             }
             Q_EMIT hook(QString::fromUtf8(hookEvent->name), hookEvent->id, event->reply_userdata);
diff --git a/src/mpvrenderer.cpp b/src/mpvrenderer.cpp
index 50f4e5f..30c47c9 100644
--- a/src/mpvrenderer.cpp
+++ b/src/mpvrenderer.cpp
@@ -23,7 +23,8 @@ static void *get_proc_address_mpv(void *ctx, const char *name)
     Q_UNUSED(ctx)
 
     QOpenGLContext *glctx = QOpenGLContext::currentContext();
-    if (!glctx) {
+    if (glctx == nullptr) {
+        qCDebug(MpvQt_MpvRenderer) << "get_proc_address_mpv: glctx is nullptr";
         return nullptr;
     }
 
@@ -126,7 +127,7 @@ mpv_render_context *MpvRenderer::createMpvRenderContext()
     mpv_handle *handle = m_mpvResourceManager->mpvHandleManager->mpvHandle;
     int result = mpv_render_context_create(&renderCtx, handle, params);
     if (result < 0) {
-        qCritical() << "failed to initialize mpv GL context:" << mpv_error_string(result);
+        qCCritical(MpvQt_MpvRenderer) << "failed to initialize mpv GL context:" << mpv_error_string(result);
         return nullptr;
     }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.