b=576620; fix bufferData parameter validation; r=vladimir

This commit is contained in:
Benoit Jacob 2010-07-03 18:34:07 -04:00
parent 54efe381b9
commit 482cbc4e3f
3 changed files with 26 additions and 0 deletions

View File

@ -337,6 +337,7 @@ protected:
PRBool ValidateComparisonEnum(WebGLenum target, const char *info);
PRBool ValidateStencilOpEnum(WebGLenum action, const char *info);
PRBool ValidateFaceEnum(WebGLenum target, const char *info);
PRBool ValidateBufferUsageEnum(WebGLenum target, const char *info);
PRBool ValidateTexFormatAndType(WebGLenum format, WebGLenum type,
PRUint32 *texelSize, const char *info);

View File

@ -347,6 +347,12 @@ WebGLContext::BufferData_size(WebGLenum target, WebGLsizei size, WebGLenum usage
return ErrorInvalidEnum("BufferData: invalid target");
}
if (size < 0)
return ErrorInvalidValue("bufferData: negative size");
if (!ValidateBufferUsageEnum(usage, "bufferData: usage"))
return NS_OK;
if (!boundBuffer)
return ErrorInvalidOperation("BufferData: no buffer bound!");
@ -373,6 +379,9 @@ WebGLContext::BufferData_buf(WebGLenum target, js::ArrayBuffer *wb, WebGLenum us
return ErrorInvalidEnum("BufferData: invalid target");
}
if (!ValidateBufferUsageEnum(usage, "bufferData: usage"))
return NS_OK;
if (!boundBuffer)
return ErrorInvalidOperation("BufferData: no buffer bound!");
@ -399,6 +408,9 @@ WebGLContext::BufferData_array(WebGLenum target, js::TypedArray *wa, WebGLenum u
return ErrorInvalidEnum("BufferData: invalid target");
}
if (!ValidateBufferUsageEnum(usage, "bufferData: usage"))
return NS_OK;
if (!boundBuffer)
return ErrorInvalidOperation("BufferData: no buffer bound!");

View File

@ -258,6 +258,19 @@ PRBool WebGLContext::ValidateFaceEnum(WebGLenum target, const char *info)
}
}
PRBool WebGLContext::ValidateBufferUsageEnum(WebGLenum target, const char *info)
{
switch (target) {
case LOCAL_GL_STREAM_DRAW:
case LOCAL_GL_STATIC_DRAW:
case LOCAL_GL_DYNAMIC_DRAW:
return PR_TRUE;
default:
ErrorInvalidEnumInfo(info);
return PR_FALSE;
}
}
PRBool WebGLContext::ValidateTexFormatAndType(WebGLenum format, WebGLenum type,
PRUint32 *texelSize, const char *info)
{