OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <limits> | 5 #include <limits> |
6 | 6 |
7 #include "mojo/public/cpp/bindings/buffer.h" | 7 #include "mojo/public/cpp/bindings/buffer.h" |
8 #include "mojo/public/cpp/bindings/lib/bindings_serialization.h" | 8 #include "mojo/public/cpp/bindings/lib/bindings_serialization.h" |
9 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" | 9 #include "mojo/public/cpp/bindings/lib/fixed_buffer.h" |
10 #include "mojo/public/cpp/bindings/lib/scratch_buffer.h" | 10 #include "mojo/public/cpp/bindings/lib/scratch_buffer.h" |
(...skipping 25 matching lines...) Expand all Loading... |
36 | 36 |
37 // Large allocations won't be on the stack. | 37 // Large allocations won't be on the stack. |
38 void* large = buf.Allocate(100*1024); | 38 void* large = buf.Allocate(100*1024); |
39 EXPECT_TRUE(IsZero(large, 100*1024)); | 39 EXPECT_TRUE(IsZero(large, 100*1024)); |
40 EXPECT_FALSE(large >= &buf && large < (&buf + sizeof(buf))); | 40 EXPECT_FALSE(large >= &buf && large < (&buf + sizeof(buf))); |
41 | 41 |
42 // But another small allocation should be back on the stack. | 42 // But another small allocation should be back on the stack. |
43 small = buf.Allocate(10); | 43 small = buf.Allocate(10); |
44 EXPECT_TRUE(IsZero(small, 10)); | 44 EXPECT_TRUE(IsZero(small, 10)); |
45 EXPECT_TRUE(small >= &buf && small < (&buf + sizeof(buf))); | 45 EXPECT_TRUE(small >= &buf && small < (&buf + sizeof(buf))); |
| 46 |
| 47 // And a request so large it will fail. |
| 48 void* fail = buf.Allocate(std::numeric_limits<size_t>::max() - 1024u); |
| 49 EXPECT_TRUE(!fail); |
| 50 |
| 51 // And a request so large it will overflow and fail. |
| 52 void* overflow = buf.Allocate(std::numeric_limits<size_t>::max() - 12u); |
| 53 EXPECT_TRUE(!overflow); |
46 } | 54 } |
47 | 55 |
48 // Tests that Buffer::current() returns the correct value. | 56 // Tests that Buffer::current() returns the correct value. |
49 TEST(ScratchBufferTest, Stacked) { | 57 TEST(ScratchBufferTest, Stacked) { |
50 Environment env; | 58 Environment env; |
51 | 59 |
52 EXPECT_FALSE(Buffer::current()); | 60 EXPECT_FALSE(Buffer::current()); |
53 | 61 |
54 { | 62 { |
55 internal::ScratchBuffer a; | 63 internal::ScratchBuffer a; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
118 Environment env; | 126 Environment env; |
119 | 127 |
120 internal::FixedBuffer buf(24); | 128 internal::FixedBuffer buf(24); |
121 | 129 |
122 // A little bit too large. | 130 // A little bit too large. |
123 EXPECT_EQ(reinterpret_cast<void*>(0), buf.Allocate(32)); | 131 EXPECT_EQ(reinterpret_cast<void*>(0), buf.Allocate(32)); |
124 | 132 |
125 // Move the cursor forward. | 133 // Move the cursor forward. |
126 EXPECT_NE(reinterpret_cast<void*>(0), buf.Allocate(16)); | 134 EXPECT_NE(reinterpret_cast<void*>(0), buf.Allocate(16)); |
127 | 135 |
| 136 // A lot too large. |
| 137 EXPECT_EQ(reinterpret_cast<void*>(0), |
| 138 buf.Allocate(std::numeric_limits<size_t>::max() - 1024u)); |
| 139 |
128 // A lot too large, leading to possible integer overflow. | 140 // A lot too large, leading to possible integer overflow. |
129 EXPECT_EQ(reinterpret_cast<void*>(0), | 141 EXPECT_EQ(reinterpret_cast<void*>(0), |
130 buf.Allocate(std::numeric_limits<size_t>::max() - 8u)); | 142 buf.Allocate(std::numeric_limits<size_t>::max() - 8u)); |
131 } | 143 } |
132 #endif | 144 #endif |
133 | 145 |
134 } // namespace | 146 } // namespace |
135 } // namespace test | 147 } // namespace test |
136 } // namespace mojo | 148 } // namespace mojo |
OLD | NEW |