From d17904ffb9610bdf662e13f3d758c3ba0e75e50b Mon Sep 17 00:00:00 2001 From: Pasi Keranen <pasi.keranen@digia.com> Date: Fri, 19 Dec 2014 13:16:16 +0200 Subject: [PATCH] Fixes null pointer crash with texImage2D MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes null pointer crash if user gives null parameter as image. Improved logging added for texture images. Change-Id: I03d420d368232d4b84fceaa27a85c8bbc32e8429 Reviewed-by: Pasi Keränen <pasi.keranen@digia.com> --- src/abstractobject3d.cpp | 13 ++++++++++++- src/abstractobject3d_p.h | 2 ++ src/context3d.cpp | 9 +++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/abstractobject3d.cpp b/src/abstractobject3d.cpp index 147db70..75871bd 100644 --- a/src/abstractobject3d.cpp +++ b/src/abstractobject3d.cpp @@ -42,7 +42,8 @@ QT_CANVAS3D_BEGIN_NAMESPACE * \internal */ CanvasAbstractObject::CanvasAbstractObject(QObject *parent) : - QObject(parent) + QObject(parent), + m_hasName(false) { m_name = QString("0x%1").arg((long long) this, 0, 16); } @@ -63,6 +64,7 @@ void CanvasAbstractObject::setName(const QString &name) return; m_name = name; + m_hasName = true; emit nameChanged(m_name); } @@ -75,4 +77,13 @@ const QString &CanvasAbstractObject::name() const return m_name; } +/*! + * \internal + */ +bool CanvasAbstractObject::hasSpecificName() const +{ + return m_hasName; +} + + QT_CANVAS3D_END_NAMESPACE diff --git a/src/abstractobject3d_p.h b/src/abstractobject3d_p.h index ff39836..27cda48 100644 --- a/src/abstractobject3d_p.h +++ b/src/abstractobject3d_p.h @@ -64,12 +64,14 @@ public: void setName(const QString &name); const QString &name() const; + bool hasSpecificName() const; signals: void nameChanged(const QString &name); private: QString m_name; + bool m_hasName; }; QT_CANVAS3D_END_NAMESPACE diff --git a/src/context3d.cpp b/src/context3d.cpp index 5fc0ffc..8be26a3 100644 --- a/src/context3d.cpp +++ b/src/context3d.cpp @@ -1127,6 +1127,11 @@ void CanvasContext::texImage2D(glEnums target, int level, glEnums internalformat << ":INVALID_OPERATION Currently bound texture is deleted"; m_error = INVALID_OPERATION; return; + } else if (image == 0) { + if (m_logAllErrors) qDebug() << "Context3D::" << __FUNCTION__ + << ":INVALID_OPERATION Given image was null"; + m_error = INVALID_OPERATION; + return; } uchar *pixels = 0; @@ -1152,6 +1157,10 @@ void CanvasContext::texImage2D(glEnums target, int level, glEnums internalformat return; } + if (!m_currentTexture->hasSpecificName()) { + m_currentTexture->setName("ImageTexture_"+image->name()); + } + glTexImage2D(target, level, internalformat, image->width(), image->height(), 0, format, type, pixels); } -- GitLab