Added static assertions to secure code

Former-commit-id: 207f1135b3b40cee74fbf8ba98e6fb7379ba8c33
This commit is contained in:
Lynix 2013-08-03 20:58:50 +02:00
parent 19e02a900b
commit 1ebaf4749c
3 changed files with 48 additions and 0 deletions

View File

@ -24,6 +24,8 @@ namespace
"Error: ", // nzErrorType_Normal "Error: ", // nzErrorType_Normal
"Warning: " // nzErrorType_Warning "Warning: " // nzErrorType_Warning
}; };
static_assert(sizeof(errorType)/sizeof(const char*) == nzErrorType_Max+1, "Error type array is incomplete");
} }
NzLog::NzLog() : NzLog::NzLog() :

View File

@ -1229,6 +1229,8 @@ GLenum NzOpenGL::Attachment[nzAttachmentPoint_Max+1] =
GL_STENCIL_ATTACHMENT // nzAttachmentPoint_Stencil GL_STENCIL_ATTACHMENT // nzAttachmentPoint_Stencil
}; };
static_assert(sizeof(NzOpenGL::Attachment)/sizeof(GLenum) == nzAttachmentPoint_Max+1, "Attachment array is incomplete");
nzUInt8 NzOpenGL::AttributeIndex[nzAttributeUsage_Max+1] = nzUInt8 NzOpenGL::AttributeIndex[nzAttributeUsage_Max+1] =
{ {
10, // nzAttributeUsage_InstanceData0 10, // nzAttributeUsage_InstanceData0
@ -1249,6 +1251,8 @@ nzUInt8 NzOpenGL::AttributeIndex[nzAttributeUsage_Max+1] =
9 // nzAttributeUsage_Userdata5 9 // nzAttributeUsage_Userdata5
}; };
static_assert(sizeof(NzOpenGL::AttributeIndex)/sizeof(nzUInt8) == nzAttributeUsage_Max+1, "Attribute index array is incomplete");
GLenum NzOpenGL::AttributeType[nzAttributeType_Max+1] = GLenum NzOpenGL::AttributeType[nzAttributeType_Max+1] =
{ {
GL_UNSIGNED_BYTE, // nzAttributeType_Color GL_UNSIGNED_BYTE, // nzAttributeType_Color
@ -1262,6 +1266,8 @@ GLenum NzOpenGL::AttributeType[nzAttributeType_Max+1] =
GL_FLOAT // nzAttributeType_Float4 GL_FLOAT // nzAttributeType_Float4
}; };
static_assert(sizeof(NzOpenGL::AttributeType)/sizeof(GLenum) == nzAttributeType_Max+1, "Attribute type array is incomplete");
GLenum NzOpenGL::BlendFunc[nzBlendFunc_Max+1] = GLenum NzOpenGL::BlendFunc[nzBlendFunc_Max+1] =
{ {
GL_DST_ALPHA, // nzBlendFunc_DestAlpha GL_DST_ALPHA, // nzBlendFunc_DestAlpha
@ -1276,6 +1282,8 @@ GLenum NzOpenGL::BlendFunc[nzBlendFunc_Max+1] =
GL_ZERO // nzBlendFunc_Zero GL_ZERO // nzBlendFunc_Zero
}; };
static_assert(sizeof(NzOpenGL::BlendFunc)/sizeof(GLenum) == nzBlendFunc_Max+1, "Blend func array is incomplete");
GLenum NzOpenGL::BufferLock[nzBufferAccess_Max+1] = GLenum NzOpenGL::BufferLock[nzBufferAccess_Max+1] =
{ {
GL_WRITE_ONLY, // nzBufferAccess_DiscardAndWrite GL_WRITE_ONLY, // nzBufferAccess_DiscardAndWrite
@ -1284,6 +1292,8 @@ GLenum NzOpenGL::BufferLock[nzBufferAccess_Max+1] =
GL_WRITE_ONLY // nzBufferAccess_WriteOnly GL_WRITE_ONLY // nzBufferAccess_WriteOnly
}; };
static_assert(sizeof(NzOpenGL::BufferLock)/sizeof(GLenum) == nzBufferAccess_Max+1, "Buffer lock array is incomplete");
GLenum NzOpenGL::BufferLockRange[nzBufferAccess_Max+1] = GLenum NzOpenGL::BufferLockRange[nzBufferAccess_Max+1] =
{ {
GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_WRITE_BIT, // nzBufferAccess_DiscardAndWrite GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_WRITE_BIT, // nzBufferAccess_DiscardAndWrite
@ -1292,18 +1302,24 @@ GLenum NzOpenGL::BufferLockRange[nzBufferAccess_Max+1] =
GL_MAP_WRITE_BIT // nzBufferAccess_WriteOnly GL_MAP_WRITE_BIT // nzBufferAccess_WriteOnly
}; };
static_assert(sizeof(NzOpenGL::BufferLockRange)/sizeof(GLenum) == nzBufferAccess_Max+1, "Buffer lock range array is incomplete");
GLenum NzOpenGL::BufferTarget[nzBufferType_Max+1] = GLenum NzOpenGL::BufferTarget[nzBufferType_Max+1] =
{ {
GL_ELEMENT_ARRAY_BUFFER, // nzBufferType_Index, GL_ELEMENT_ARRAY_BUFFER, // nzBufferType_Index,
GL_ARRAY_BUFFER, // nzBufferType_Vertex GL_ARRAY_BUFFER, // nzBufferType_Vertex
}; };
static_assert(sizeof(NzOpenGL::BufferTarget)/sizeof(GLenum) == nzBufferType_Max+1, "Buffer target array is incomplete");
GLenum NzOpenGL::BufferTargetBinding[nzBufferType_Max+1] = GLenum NzOpenGL::BufferTargetBinding[nzBufferType_Max+1] =
{ {
GL_ELEMENT_ARRAY_BUFFER_BINDING, // nzBufferType_Index, GL_ELEMENT_ARRAY_BUFFER_BINDING, // nzBufferType_Index,
GL_ARRAY_BUFFER_BINDING, // nzBufferType_Vertex GL_ARRAY_BUFFER_BINDING, // nzBufferType_Vertex
}; };
static_assert(sizeof(NzOpenGL::BufferTargetBinding)/sizeof(GLenum) == nzBufferType_Max+1, "Buffer target binding array is incomplete");
GLenum NzOpenGL::BufferUsage[nzBufferUsage_Max+1] = GLenum NzOpenGL::BufferUsage[nzBufferUsage_Max+1] =
{ {
// J'ai choisi DYNAMIC à la place de STREAM car DYNAMIC semble plus adapté au profil "une mise à jour pour quelques rendus" // J'ai choisi DYNAMIC à la place de STREAM car DYNAMIC semble plus adapté au profil "une mise à jour pour quelques rendus"
@ -1313,6 +1329,8 @@ GLenum NzOpenGL::BufferUsage[nzBufferUsage_Max+1] =
GL_STATIC_DRAW // nzBufferUsage_Static GL_STATIC_DRAW // nzBufferUsage_Static
}; };
static_assert(sizeof(NzOpenGL::BufferUsage)/sizeof(GLenum) == nzBufferUsage_Max+1, "Buffer usage array is incomplete");
GLenum NzOpenGL::CubemapFace[6] = GLenum NzOpenGL::CubemapFace[6] =
{ {
GL_TEXTURE_CUBE_MAP_POSITIVE_X, // nzCubemapFace_PositiveX GL_TEXTURE_CUBE_MAP_POSITIVE_X, // nzCubemapFace_PositiveX
@ -1323,6 +1341,8 @@ GLenum NzOpenGL::CubemapFace[6] =
GL_TEXTURE_CUBE_MAP_NEGATIVE_Z // nzCubemapFace_NegativeZ GL_TEXTURE_CUBE_MAP_NEGATIVE_Z // nzCubemapFace_NegativeZ
}; };
static_assert(sizeof(NzOpenGL::CubemapFace)/sizeof(GLenum) == 6, "Cubemap face array is incomplete");
GLenum NzOpenGL::FaceCulling[nzFaceCulling_Max+1] = GLenum NzOpenGL::FaceCulling[nzFaceCulling_Max+1] =
{ {
GL_BACK, // nzFaceCulling_Back GL_BACK, // nzFaceCulling_Back
@ -1330,6 +1350,8 @@ GLenum NzOpenGL::FaceCulling[nzFaceCulling_Max+1] =
GL_FRONT_AND_BACK // nzFaceCulling_FrontAndBack GL_FRONT_AND_BACK // nzFaceCulling_FrontAndBack
}; };
static_assert(sizeof(NzOpenGL::FaceCulling)/sizeof(GLenum) == nzFaceCulling_Max+1, "Face culling array is incomplete");
GLenum NzOpenGL::FaceFilling[nzFaceFilling_Max+1] = GLenum NzOpenGL::FaceFilling[nzFaceFilling_Max+1] =
{ {
GL_POINT, // nzFaceFilling_Point GL_POINT, // nzFaceFilling_Point
@ -1337,6 +1359,8 @@ GLenum NzOpenGL::FaceFilling[nzFaceFilling_Max+1] =
GL_FILL // nzFaceFilling_Fill GL_FILL // nzFaceFilling_Fill
}; };
static_assert(sizeof(NzOpenGL::FaceFilling)/sizeof(GLenum) == nzFaceFilling_Max+1, "Face filling array is incomplete");
GLenum NzOpenGL::PrimitiveMode[nzPrimitiveMode_Max+1] = GLenum NzOpenGL::PrimitiveMode[nzPrimitiveMode_Max+1] =
{ {
GL_LINES, // nzPrimitiveMode_LineList GL_LINES, // nzPrimitiveMode_LineList
@ -1347,6 +1371,8 @@ GLenum NzOpenGL::PrimitiveMode[nzPrimitiveMode_Max+1] =
GL_TRIANGLE_FAN // nzPrimitiveMode_TriangleFan GL_TRIANGLE_FAN // nzPrimitiveMode_TriangleFan
}; };
static_assert(sizeof(NzOpenGL::PrimitiveMode)/sizeof(GLenum) == nzPrimitiveMode_Max+1, "Primitive mode array is incomplete");
GLenum NzOpenGL::RendererComparison[nzRendererComparison_Max+1] = GLenum NzOpenGL::RendererComparison[nzRendererComparison_Max+1] =
{ {
GL_ALWAYS, // nzRendererComparison_Always GL_ALWAYS, // nzRendererComparison_Always
@ -1358,6 +1384,8 @@ GLenum NzOpenGL::RendererComparison[nzRendererComparison_Max+1] =
GL_NEVER // nzRendererComparison_Never GL_NEVER // nzRendererComparison_Never
}; };
static_assert(sizeof(NzOpenGL::RendererComparison)/sizeof(GLenum) == nzRendererComparison_Max+1, "Renderer comparison array is incomplete");
GLenum NzOpenGL::RendererParameter[nzRendererParameter_Max+1] = GLenum NzOpenGL::RendererParameter[nzRendererParameter_Max+1] =
{ {
GL_BLEND, // nzRendererParameter_Blend GL_BLEND, // nzRendererParameter_Blend
@ -1369,6 +1397,8 @@ GLenum NzOpenGL::RendererParameter[nzRendererParameter_Max+1] =
GL_STENCIL_TEST // nzRendererParameter_StencilTest GL_STENCIL_TEST // nzRendererParameter_StencilTest
}; };
static_assert(sizeof(NzOpenGL::RendererParameter)/sizeof(GLenum) == nzRendererParameter_Max+1, "Renderer parameter array is incomplete");
GLenum NzOpenGL::SamplerWrapMode[nzSamplerWrap_Max+1] = GLenum NzOpenGL::SamplerWrapMode[nzSamplerWrap_Max+1] =
{ {
GL_CLAMP_TO_EDGE, // nzTextureWrap_Clamp GL_CLAMP_TO_EDGE, // nzTextureWrap_Clamp
@ -1376,6 +1406,8 @@ GLenum NzOpenGL::SamplerWrapMode[nzSamplerWrap_Max+1] =
GL_REPEAT // nzTextureWrap_Repeat GL_REPEAT // nzTextureWrap_Repeat
}; };
static_assert(sizeof(NzOpenGL::SamplerWrapMode)/sizeof(GLenum) == nzSamplerWrap_Max+1, "Sampler wrap mode array is incomplete");
GLenum NzOpenGL::ShaderType[nzShaderType_Max+1] = GLenum NzOpenGL::ShaderType[nzShaderType_Max+1] =
{ {
GL_FRAGMENT_SHADER, // nzShaderType_Fragment GL_FRAGMENT_SHADER, // nzShaderType_Fragment
@ -1383,6 +1415,8 @@ GLenum NzOpenGL::ShaderType[nzShaderType_Max+1] =
GL_VERTEX_SHADER // nzShaderType_Vertex GL_VERTEX_SHADER // nzShaderType_Vertex
}; };
static_assert(sizeof(NzOpenGL::ShaderType)/sizeof(GLenum) == nzShaderType_Max+1, "Shader type array is incomplete");
GLenum NzOpenGL::StencilOperation[nzStencilOperation_Max+1] = GLenum NzOpenGL::StencilOperation[nzStencilOperation_Max+1] =
{ {
GL_DECR, // nzStencilOperation_Decrement GL_DECR, // nzStencilOperation_Decrement
@ -1395,6 +1429,8 @@ GLenum NzOpenGL::StencilOperation[nzStencilOperation_Max+1] =
GL_ZERO // nzStencilOperation_Zero GL_ZERO // nzStencilOperation_Zero
}; };
static_assert(sizeof(NzOpenGL::StencilOperation)/sizeof(GLenum) == nzStencilOperation_Max+1, "Stencil operation array is incomplete");
GLenum NzOpenGL::TextureTarget[nzImageType_Max+1] = GLenum NzOpenGL::TextureTarget[nzImageType_Max+1] =
{ {
GL_TEXTURE_1D, // nzImageType_1D GL_TEXTURE_1D, // nzImageType_1D
@ -1405,6 +1441,8 @@ GLenum NzOpenGL::TextureTarget[nzImageType_Max+1] =
GL_TEXTURE_CUBE_MAP // nzImageType_Cubemap GL_TEXTURE_CUBE_MAP // nzImageType_Cubemap
}; };
static_assert(sizeof(NzOpenGL::TextureTarget)/sizeof(GLenum) == nzImageType_Max+1, "Texture target array is incomplete");
GLenum NzOpenGL::TextureTargetBinding[nzImageType_Max+1] = GLenum NzOpenGL::TextureTargetBinding[nzImageType_Max+1] =
{ {
GL_TEXTURE_BINDING_1D, // nzImageType_1D GL_TEXTURE_BINDING_1D, // nzImageType_1D
@ -1415,6 +1453,8 @@ GLenum NzOpenGL::TextureTargetBinding[nzImageType_Max+1] =
GL_TEXTURE_BINDING_CUBE_MAP // nzImageType_Cubemap GL_TEXTURE_BINDING_CUBE_MAP // nzImageType_Cubemap
}; };
static_assert(sizeof(NzOpenGL::TextureTargetBinding)/sizeof(GLenum) == nzImageType_Max+1, "Texture target binding array is incomplete");
GLenum NzOpenGL::TextureTargetProxy[nzImageType_Max+1] = GLenum NzOpenGL::TextureTargetProxy[nzImageType_Max+1] =
{ {
GL_PROXY_TEXTURE_1D, // nzImageType_1D GL_PROXY_TEXTURE_1D, // nzImageType_1D
@ -1425,6 +1465,8 @@ GLenum NzOpenGL::TextureTargetProxy[nzImageType_Max+1] =
GL_PROXY_TEXTURE_CUBE_MAP // nzImageType_Cubemap GL_PROXY_TEXTURE_CUBE_MAP // nzImageType_Cubemap
}; };
static_assert(sizeof(NzOpenGL::TextureTargetProxy)/sizeof(GLenum) == nzImageType_Max+1, "Texture target proxy array is incomplete");
PFNGLACTIVETEXTUREPROC glActiveTexture = nullptr; PFNGLACTIVETEXTUREPROC glActiveTexture = nullptr;
PFNGLATTACHSHADERPROC glAttachShader = nullptr; PFNGLATTACHSHADERPROC glAttachShader = nullptr;
PFNGLBEGINQUERYPROC glBeginQuery = nullptr; PFNGLBEGINQUERYPROC glBeginQuery = nullptr;

View File

@ -23,6 +23,8 @@ namespace
4 // nzAttributeType_Float4 4 // nzAttributeType_Float4
}; };
static_assert(sizeof(attributeSize)/sizeof(unsigned int) == nzAttributeType_Max+1, "Attribute size array is incomplete");
unsigned int attributeStride[nzAttributeType_Max+1] = unsigned int attributeStride[nzAttributeType_Max+1] =
{ {
4*sizeof(nzUInt8), // nzAttributeType_Color 4*sizeof(nzUInt8), // nzAttributeType_Color
@ -35,6 +37,8 @@ namespace
3*sizeof(float), // nzAttributeType_Float3 3*sizeof(float), // nzAttributeType_Float3
4*sizeof(float) // nzAttributeType_Float4 4*sizeof(float) // nzAttributeType_Float4
}; };
static_assert(sizeof(attributeStride)/sizeof(unsigned int) == nzAttributeType_Max+1, "Attribute stride array is incomplete");
} }
NzVertexDeclaration::NzVertexDeclaration() : NzVertexDeclaration::NzVertexDeclaration() :