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

randombit / botan / 5111374265

29 May 2023 11:19AM UTC coverage: 92.227% (+0.5%) from 91.723%
5111374265

push

github

randombit
Next release will be 3.1.0. Update release notes

75588 of 81959 relevant lines covered (92.23%)

11886470.91 hits per line

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

86.79
/src/lib/filters/comp_filter.cpp
1
/*
2
* Filter interface for compression
3
* (C) 2014,2015,2016 Jack Lloyd
4
* (C) 2015 Matej Kenda
5
*
6
* Botan is released under the Simplified BSD License (see license.txt)
7
*/
8

9
#include <botan/filters.h>
10

11
#include <botan/exceptn.h>
12
#include <botan/internal/fmt.h>
13

14
#if defined(BOTAN_HAS_COMPRESSION)
15
   #include <botan/compression.h>
16
#endif
17

18
namespace Botan {
19

20
#if defined(BOTAN_HAS_COMPRESSION)
21

22
Compression_Filter::Compression_Filter(std::string_view type, size_t level, size_t bs) :
2✔
23
      m_comp(Compression_Algorithm::create(type)), m_buffersize(std::max<size_t>(bs, 256)), m_level(level) {
2✔
24
   if(!m_comp) {
2✔
25
      throw Invalid_Argument(fmt("Compression type '{}' not found", type));
×
26
   }
27
}
2✔
28

29
Compression_Filter::~Compression_Filter() { /* for unique_ptr */
4✔
30
}
8✔
31

32
std::string Compression_Filter::name() const { return m_comp->name(); }
2✔
33

34
void Compression_Filter::start_msg() { m_comp->start(m_level); }
2✔
35

36
void Compression_Filter::write(const uint8_t input[], size_t input_length) {
2✔
37
   while(input_length) {
4✔
38
      const size_t take = std::min(m_buffersize, input_length);
2✔
39
      BOTAN_ASSERT(take > 0, "Consumed something");
2✔
40

41
      m_buffer.assign(input, input + take);
2✔
42
      m_comp->update(m_buffer);
2✔
43

44
      send(m_buffer);
2✔
45

46
      input += take;
2✔
47
      input_length -= take;
2✔
48
   }
49
}
2✔
50

51
void Compression_Filter::flush() {
×
52
   m_buffer.clear();
×
53
   m_comp->update(m_buffer, 0, true);
×
54
   send(m_buffer);
×
55
}
×
56

57
void Compression_Filter::end_msg() {
2✔
58
   m_buffer.clear();
2✔
59
   m_comp->finish(m_buffer);
2✔
60
   send(m_buffer);
2✔
61
}
2✔
62

63
Decompression_Filter::Decompression_Filter(std::string_view type, size_t bs) :
2✔
64
      m_comp(Decompression_Algorithm::create(type)), m_buffersize(std::max<size_t>(bs, 256)) {
2✔
65
   if(!m_comp) {
2✔
66
      throw Invalid_Argument(fmt("Compression type '{}' not found", type));
×
67
   }
68
}
2✔
69

70
Decompression_Filter::~Decompression_Filter() { /* for unique_ptr */
4✔
71
}
8✔
72

73
std::string Decompression_Filter::name() const { return m_comp->name(); }
2✔
74

75
void Decompression_Filter::start_msg() { m_comp->start(); }
2✔
76

77
void Decompression_Filter::write(const uint8_t input[], size_t input_length) {
2✔
78
   while(input_length) {
4✔
79
      const size_t take = std::min(m_buffersize, input_length);
2✔
80
      BOTAN_ASSERT(take > 0, "Consumed something");
2✔
81

82
      m_buffer.assign(input, input + take);
2✔
83
      m_comp->update(m_buffer);
2✔
84

85
      send(m_buffer);
2✔
86

87
      input += take;
2✔
88
      input_length -= take;
2✔
89
   }
90
}
2✔
91

92
void Decompression_Filter::end_msg() {
2✔
93
   m_buffer.clear();
2✔
94
   m_comp->finish(m_buffer);
2✔
95
   send(m_buffer);
2✔
96
}
2✔
97

98
#endif
99

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