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