Add base::numerics for safe math and conversions.
This replaces are "IsUnsignedXXXSafe" family of methods.
Also add overflow checks to unpack block sizes.
BUG=angleproject:1397
Change-Id: Ib47be149b0486c70f795b0d0f8899441faac9340
Reviewed-on: https://chromium-review.googlesource.com/348062
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Commit-Queue: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/ProgramD3D.cpp b/src/libANGLE/renderer/d3d/ProgramD3D.cpp
index 027f7b7..97da25f 100644
--- a/src/libANGLE/renderer/d3d/ProgramD3D.cpp
+++ b/src/libANGLE/renderer/d3d/ProgramD3D.cpp
@@ -1004,8 +1004,8 @@
for (const D3DUniform *uniform : mD3DUniforms)
{
// Type, name and arraySize are redundant, so aren't stored in the binary.
- stream->writeInt(uniform->psRegisterIndex);
- stream->writeInt(uniform->vsRegisterIndex);
+ stream->writeIntOrNegOne(uniform->psRegisterIndex);
+ stream->writeIntOrNegOne(uniform->vsRegisterIndex);
stream->writeInt(uniform->registerCount);
stream->writeInt(uniform->registerElement);
}
@@ -1013,8 +1013,8 @@
stream->writeInt(mD3DUniformBlocks.size());
for (const D3DUniformBlock &uniformBlock : mD3DUniformBlocks)
{
- stream->writeInt(uniformBlock.psRegisterIndex);
- stream->writeInt(uniformBlock.vsRegisterIndex);
+ stream->writeIntOrNegOne(uniformBlock.psRegisterIndex);
+ stream->writeIntOrNegOne(uniformBlock.vsRegisterIndex);
}
stream->writeInt(mStreamOutVaryings.size());
@@ -1061,7 +1061,7 @@
for (size_t inputIndex = 0; inputIndex < inputLayout.size(); inputIndex++)
{
- stream->writeInt(inputLayout[inputIndex]);
+ stream->writeInt(static_cast<unsigned int>(inputLayout[inputIndex]));
}
size_t vertexShaderSize = vertexExecutable->shaderExecutable()->getLength();