OSDN Git Service

Add parameters validation to glShaderSource() API
authorTina Zhang <tina.zhang@intel.com>
Thu, 4 Dec 2014 04:37:30 +0000 (12:37 +0800)
committerTina Zhang <tina.zhang@intel.com>
Thu, 11 Dec 2014 01:44:40 +0000 (09:44 +0800)
According to GLES2.0 Spec., add parameters validataion to
glShaderSource() API.

Change-Id: I5b0e939fd9657ccbb40a13896c8fc74ef02fd085
Signed-off-by: Tina Zhang <tina.zhang@intel.com>
shared/OpenglCodecCommon/GLSharedGroup.cpp [changed mode: 0644->0755]
shared/OpenglCodecCommon/GLSharedGroup.h [changed mode: 0644->0755]
system/GLESv2_enc/GL2Encoder.cpp [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index c7da37a..b079b6d
@@ -240,6 +240,12 @@ GLSharedGroup::~GLSharedGroup()
     clearObjectMap(m_shaders);
 }
 
+bool GLSharedGroup::isObject(GLuint obj)
+{
+    android::AutoMutex _lock(m_lock);
+    return ((m_shaders.valueFor(obj)!=NULL) || (m_programs.valueFor(obj)!=NULL));
+}
+
 BufferData * GLSharedGroup::getBufferData(GLuint bufferId)
 {
     android::AutoMutex _lock(m_lock);
old mode 100644 (file)
new mode 100755 (executable)
index 61b8f00..6dfcd8f
@@ -110,6 +110,7 @@ private:
 public:
     GLSharedGroup();
     ~GLSharedGroup();
+    bool isObject(GLuint obj);
     BufferData * getBufferData(GLuint bufferId);
     void    addBufferData(GLuint bufferId, GLsizeiptr size, void * data);
     void    updateBufferData(GLuint bufferId, GLsizeiptr size, void * data);
old mode 100644 (file)
new mode 100755 (executable)
index 80a2cda..90aa61d
@@ -656,7 +656,9 @@ void GL2Encoder::s_glShaderSource(void *self, GLuint shader, GLsizei count, cons
 {
     GL2Encoder* ctx = (GL2Encoder*)self;
     ShaderData* shaderData = ctx->m_shared->getShaderData(shader);
-    SET_ERROR_IF(!shaderData, GL_INVALID_VALUE);
+    SET_ERROR_IF(!ctx->m_shared->isObject(shader), GL_INVALID_VALUE);
+    SET_ERROR_IF(!shaderData, GL_INVALID_OPERATION);
+    SET_ERROR_IF((count<0), GL_INVALID_VALUE);
 
     int len = glUtilsCalcShaderSourceLen((char**)string, (GLint*)length, count);
     char *str = new char[len + 1];