• 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

78.05
/src/lib/filters/buf_filt.cpp
1
/*
2
* Buffered Filter
3
* (C) 1999-2007 Jack Lloyd
4
*
5
* Botan is released under the Simplified BSD License (see license.txt)
6
*/
7

8
#include <botan/filters.h>
9

10
#include <botan/exceptn.h>
11
#include <botan/mem_ops.h>
12
#include <botan/internal/rounding.h>
13

14
namespace Botan {
15

16
/*
17
* Buffered_Filter Constructor
18
*/
19
Buffered_Filter::Buffered_Filter(size_t b, size_t f) : m_main_block_mod(b), m_final_minimum(f) {
4✔
20
   if(m_main_block_mod == 0) {
4✔
21
      throw Invalid_Argument("m_main_block_mod == 0");
×
22
   }
23

24
   if(m_final_minimum > m_main_block_mod) {
4✔
25
      throw Invalid_Argument("m_final_minimum > m_main_block_mod");
×
26
   }
27

28
   m_buffer.resize(2 * m_main_block_mod);
4✔
29
   m_buffer_pos = 0;
4✔
30
}
4✔
31

32
/*
33
* Buffer input into blocks, trying to minimize copying
34
*/
35
void Buffered_Filter::write(const uint8_t input[], size_t input_size) {
37✔
36
   if(!input_size) {
37✔
37
      return;
38
   }
39

40
   if(m_buffer_pos + input_size >= m_main_block_mod + m_final_minimum) {
37✔
41
      size_t to_copy = std::min<size_t>(m_buffer.size() - m_buffer_pos, input_size);
2✔
42

43
      copy_mem(&m_buffer[m_buffer_pos], input, to_copy);
2✔
44
      m_buffer_pos += to_copy;
2✔
45

46
      input += to_copy;
2✔
47
      input_size -= to_copy;
2✔
48

49
      size_t total_to_consume =
2✔
50
         round_down(std::min(m_buffer_pos, m_buffer_pos + input_size - m_final_minimum), m_main_block_mod);
3✔
51

52
      buffered_block(m_buffer.data(), total_to_consume);
2✔
53

54
      m_buffer_pos -= total_to_consume;
2✔
55

56
      copy_mem(m_buffer.data(), m_buffer.data() + total_to_consume, m_buffer_pos);
2✔
57
   }
58

59
   if(input_size >= m_final_minimum) {
37✔
60
      size_t full_blocks = (input_size - m_final_minimum) / m_main_block_mod;
36✔
61
      size_t to_copy = full_blocks * m_main_block_mod;
36✔
62

63
      if(to_copy) {
36✔
64
         buffered_block(input, to_copy);
×
65

66
         input += to_copy;
×
67
         input_size -= to_copy;
×
68
      }
69
   }
70

71
   copy_mem(&m_buffer[m_buffer_pos], input, input_size);
37✔
72
   m_buffer_pos += input_size;
37✔
73
}
74

75
/*
76
* Finish/flush operation
77
*/
78
void Buffered_Filter::end_msg() {
33✔
79
   if(m_buffer_pos < m_final_minimum) {
33✔
80
      throw Invalid_State("Buffered filter end_msg without enough input");
×
81
   }
82

83
   size_t spare_blocks = (m_buffer_pos - m_final_minimum) / m_main_block_mod;
33✔
84

85
   if(spare_blocks) {
33✔
86
      size_t spare_bytes = m_main_block_mod * spare_blocks;
×
87
      buffered_block(m_buffer.data(), spare_bytes);
×
88
      buffered_final(&m_buffer[spare_bytes], m_buffer_pos - spare_bytes);
×
89
   } else {
90
      buffered_final(m_buffer.data(), m_buffer_pos);
33✔
91
   }
92

93
   m_buffer_pos = 0;
33✔
94
}
33✔
95

96
}  // 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

© 2026 Coveralls, Inc