Fix 64-bit build failures.

Update the BufferStorage classes to use size_t for all sizes and offsets.
BufferStorage9 now uses a std::vector to manage its memory.

BUG=angle:631

Change-Id: Iea4e7b33ede59a5b9c6a1245690c4b7865096fc3
Reviewed-on: https://chromium-review.googlesource.com/197819
Reviewed-by: Nicolas Capens <nicolascapens@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/libGLESv2.cpp b/src/libGLESv2/libGLESv2.cpp
index fe8002b..8e2c42e 100644
--- a/src/libGLESv2/libGLESv2.cpp
+++ b/src/libGLESv2/libGLESv2.cpp
@@ -644,7 +644,13 @@
                 return gl::error(GL_INVALID_OPERATION);
             }
 
-            if ((size_t)size + offset > buffer->size())
+            // Check for possible overflow of size + offset
+            if (!rx::IsUnsignedAdditionSafe<size_t>(size, offset))
+            {
+                return gl::error(GL_OUT_OF_MEMORY);
+            }
+
+            if (size + offset > buffer->size())
             {
                 return gl::error(GL_INVALID_VALUE);
             }