| Index: mojo/system/memory.cc
|
| diff --git a/mojo/system/memory.cc b/mojo/system/memory.cc
|
| index 633b2bef4adb28f34e4c2129fe5d82835fce6e20..a10b021cedc035e3f669d9eea0d25c91a698b4c5 100644
|
| --- a/mojo/system/memory.cc
|
| +++ b/mojo/system/memory.cc
|
| @@ -11,6 +11,8 @@
|
| namespace mojo {
|
| namespace system {
|
|
|
| +// TODO(vtl): Can I make this use the non-templatized function without a
|
| +// performance hit?
|
| template <size_t size>
|
| bool VerifyUserPointerForSize(const void* pointer, size_t count) {
|
| if (count > std::numeric_limits<size_t>::max() / size)
|
| @@ -22,11 +24,25 @@ bool VerifyUserPointerForSize(const void* pointer, size_t count) {
|
| return count == 0 || !!pointer;
|
| }
|
|
|
| +bool MOJO_SYSTEM_IMPL_EXPORT VerifyUserPointerForSize(const void* pointer,
|
| + size_t size,
|
| + size_t count) {
|
| + if (count > std::numeric_limits<size_t>::max() / size)
|
| + return false;
|
| +
|
| + // TODO(vtl): If running in kernel mode, do a full verification. For now, just
|
| + // check that it's non-null if |size| is nonzero. (A faster user mode
|
| + // implementation is also possible if this check is skipped.)
|
| + return count == 0 || !!pointer;
|
| +}
|
| +
|
| // Explicitly instantiate the sizes we need. Add instantiations as needed.
|
| template MOJO_SYSTEM_IMPL_EXPORT bool VerifyUserPointerForSize<1>(
|
| const void*, size_t);
|
| template MOJO_SYSTEM_IMPL_EXPORT bool VerifyUserPointerForSize<4>(
|
| const void*, size_t);
|
| +template MOJO_SYSTEM_IMPL_EXPORT bool VerifyUserPointerForSize<8>(
|
| + const void*, size_t);
|
|
|
| } // namespace system
|
| } // namespace mojo
|
|
|