summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/BinaryStream.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/BinaryStream.h')
-rw-r--r--src/3rdparty/angle/src/libANGLE/BinaryStream.h16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/BinaryStream.h b/src/3rdparty/angle/src/libANGLE/BinaryStream.h
index 50392e1d3f..3e6ccc7446 100644
--- a/src/3rdparty/angle/src/libANGLE/BinaryStream.h
+++ b/src/3rdparty/angle/src/libANGLE/BinaryStream.h
@@ -47,7 +47,7 @@ class BinaryInputStream : angle::NonCopyable
template <class IntT>
IntT readInt()
{
- int value;
+ int value = 0;
read(&value);
return static_cast<IntT>(value);
}
@@ -60,7 +60,7 @@ class BinaryInputStream : angle::NonCopyable
bool readBool()
{
- int value;
+ int value = 0;
read(&value);
return (value > 0);
}
@@ -92,7 +92,7 @@ class BinaryInputStream : angle::NonCopyable
return;
}
- if (mOffset + length > mLength)
+ if (!rx::IsUnsignedAdditionSafe(mOffset, length) || mOffset + length > mLength)
{
mError = true;
return;
@@ -104,7 +104,7 @@ class BinaryInputStream : angle::NonCopyable
void skip(size_t length)
{
- if (mOffset + length > mLength)
+ if (!rx::IsUnsignedAdditionSafe(mOffset, length) || mOffset + length > mLength)
{
mError = true;
return;
@@ -144,9 +144,15 @@ class BinaryInputStream : angle::NonCopyable
{
StaticAssertIsFundamental<T>();
+ if (!rx::IsUnsignedMultiplicationSafe(num, sizeof(T)))
+ {
+ mError = true;
+ return;
+ }
+
size_t length = num * sizeof(T);
- if (mOffset + length > mLength)
+ if (!rx::IsUnsignedAdditionSafe(mOffset, length) || mOffset + length > mLength)
{
mError = true;
return;