• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

randombit / botan / 5123321399

30 May 2023 04:06PM UTC coverage: 92.213% (+0.004%) from 92.209%
5123321399

Pull #3558

github

web-flow
Merge dd72f7389 into 057bcbc35
Pull Request #3558: Add braces around all if/else statements

75602 of 81986 relevant lines covered (92.21%)

11859779.3 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

86.36
/src/lib/utils/mem_ops.cpp
1
/*
2
* (C) 2017 Jack Lloyd
3
*
4
* Botan is released under the Simplified BSD License (see license.txt)
5
*/
6

7
#include <botan/mem_ops.h>
8

9
#include <botan/internal/ct_utils.h>
10
#include <botan/internal/safeint.h>
11
#include <cstdlib>
12
#include <new>
13

14
#if defined(BOTAN_HAS_LOCKING_ALLOCATOR)
15
   #include <botan/internal/locking_allocator.h>
16
#endif
17

18
namespace Botan {
19

20
BOTAN_MALLOC_FN void* allocate_memory(size_t elems, size_t elem_size) {
140,893,490✔
21
   if(elems == 0 || elem_size == 0) {
140,893,490✔
22
      return nullptr;
23
   }
24

25
   // Some calloc implementations do not check for overflow (?!?)
26

27
   if(!BOTAN_CHECKED_MUL(elems, elem_size).has_value()) {
140,893,490✔
28
      throw std::bad_alloc();
×
29
   }
30

31
#if defined(BOTAN_HAS_LOCKING_ALLOCATOR)
32
   if(void* p = mlock_allocator::instance().allocate(elems, elem_size)) {
140,893,490✔
33
      return p;
34
   }
35
#endif
36

37
#if defined(BOTAN_TARGET_OS_HAS_ALLOC_CONCEAL)
38
   void* ptr = ::calloc_conceal(elems, elem_size);
39
#else
40
   void* ptr = std::calloc(elems, elem_size);  // NOLINT(*-no-malloc)
66,054,838✔
41
#endif
42
   if(!ptr) {
66,054,838✔
43
      [[unlikely]] throw std::bad_alloc();
×
44
   }
45
   return ptr;
46
}
47

48
void deallocate_memory(void* p, size_t elems, size_t elem_size) {
140,893,043✔
49
   if(p == nullptr) {
140,893,043✔
50
      [[unlikely]] return;
×
51
   }
52

53
   secure_scrub_memory(p, elems * elem_size);
140,893,043✔
54

55
#if defined(BOTAN_HAS_LOCKING_ALLOCATOR)
56
   if(mlock_allocator::instance().deallocate(p, elems, elem_size)) {
140,893,043✔
57
      return;
58
   }
59
#endif
60

61
   std::free(p);  // NOLINT(*-no-malloc)
66,054,710✔
62
}
63

64
void initialize_allocator() {
457✔
65
#if defined(BOTAN_HAS_LOCKING_ALLOCATOR)
66
   mlock_allocator::instance();
457✔
67
#endif
68
}
457✔
69

70
uint8_t ct_compare_u8(const uint8_t x[], const uint8_t y[], size_t len) {
132,058✔
71
   volatile uint8_t difference = 0;
132,058✔
72

73
   for(size_t i = 0; i != len; ++i) {
3,363,650✔
74
      difference = difference | (x[i] ^ y[i]);
3,231,592✔
75
   }
76

77
   return CT::Mask<uint8_t>::is_zero(difference).value();
132,058✔
78
}
79

80
}  // namespace Botan
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc