Blender  V3.3
guardedalloc_overflow_test.cc
Go to the documentation of this file.
1 /* SPDX-License-Identifier: Apache-2.0 */
2 
3 #include "testing/testing.h"
4 
5 #include "MEM_guardedalloc.h"
6 
8 
9 /* We expect to abort on integer overflow, to prevent possible exploits. */
10 
11 #if defined(__GNUC__) && !defined(__clang__)
12 /* Disable since it's the purpose of this test. */
13 # pragma GCC diagnostic ignored "-Walloc-size-larger-than="
14 #endif
15 
16 namespace {
17 
18 void MallocArray(size_t len, size_t size)
19 {
20  void *mem = MEM_malloc_arrayN(len, size, "MallocArray");
21  if (mem) {
22  MEM_freeN(mem);
23  }
24 }
25 
26 void CallocArray(size_t len, size_t size)
27 {
28  void *mem = MEM_calloc_arrayN(len, size, "CallocArray");
29  if (mem) {
30  MEM_freeN(mem);
31  }
32 }
33 
34 } // namespace
35 
36 TEST_F(LockFreeAllocatorTest, LockfreeIntegerOverflow)
37 {
38  MallocArray(1, SIZE_MAX);
39  CallocArray(SIZE_MAX, 1);
40  MallocArray(SIZE_MAX / 2, 2);
41  CallocArray(SIZE_MAX / 1234567, 1234567);
42 
43  EXPECT_EXIT(MallocArray(SIZE_MAX, 2), ABORT_PREDICATE, "");
44  EXPECT_EXIT(CallocArray(7, SIZE_MAX), ABORT_PREDICATE, "");
45  EXPECT_EXIT(MallocArray(SIZE_MAX, 12345567), ABORT_PREDICATE, "");
46  EXPECT_EXIT(CallocArray(SIZE_MAX, SIZE_MAX), ABORT_PREDICATE, "");
47 }
48 
49 TEST_F(GuardedAllocatorTest, GuardedIntegerOverflow)
50 {
51  MallocArray(1, SIZE_MAX);
52  CallocArray(SIZE_MAX, 1);
53  MallocArray(SIZE_MAX / 2, 2);
54  CallocArray(SIZE_MAX / 1234567, 1234567);
55 
56  EXPECT_EXIT(MallocArray(SIZE_MAX, 2), ABORT_PREDICATE, "");
57  EXPECT_EXIT(CallocArray(7, SIZE_MAX), ABORT_PREDICATE, "");
58  EXPECT_EXIT(MallocArray(SIZE_MAX, 12345567), ABORT_PREDICATE, "");
59  EXPECT_EXIT(CallocArray(SIZE_MAX, SIZE_MAX), ABORT_PREDICATE, "");
60 }
Read Guarded memory(de)allocation.
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition: btDbvt.cpp:52
int len
Definition: draw_manager.c:108
TEST_F(LockFreeAllocatorTest, LockfreeIntegerOverflow)
void *(* MEM_malloc_arrayN)(size_t len, size_t size, const char *str)
Definition: mallocn.c:34
void(* MEM_freeN)(void *vmemh)
Definition: mallocn.c:27
void *(* MEM_calloc_arrayN)(size_t len, size_t size, const char *str)
Definition: mallocn.c:32
#define SIZE_MAX
Definition: stdint.h:206