1717#define SRC_UTILS_SHA1_H_
1818
1919#include < array>
20+ #include < cassert>
2021#include < exception>
2122#include < string>
2223#include < string_view>
@@ -28,35 +29,54 @@ namespace modsecurity::Utils {
2829
2930class DigestCalculationException : public std ::exception {
3031 public:
31- explicit DigestCalculationException (const char *message) noexcept
32+ explicit DigestCalculationException (const char *message)
3233 : m_message(message) { }
3334
3435 const char *what () const noexcept override {
35- return m_message;
36+ return m_message. c_str () ;
3637 }
3738
3839 private:
39- const char * m_message;
40+ std::string m_message;
4041};
4142
4243
4344template <mbedtls_md_type_t DigestType, int DigestSize>
4445class DigestImpl {
4546 public:
4647 static std::string digest (const std::string& input) {
47- const auto digestBytes = calculateDigest (input);
48- return std::string (digestBytes.begin (), digestBytes.end ());
48+ try {
49+ const auto digestBytes = calculateDigest (input);
50+ return std::string (digestBytes.begin (), digestBytes.end ());
51+ } catch (const DigestCalculationException&) {
52+ assert (false );
53+ return std::string (DigestSize, ' \0 ' );
54+ }
4955 }
5056
5157 static void digestReplace (std::string& value) {
52- const auto digestBytes = calculateDigest (value);
53- value.assign (digestBytes.begin (), digestBytes.end ());
58+ try {
59+ const auto digestBytes = calculateDigest (value);
60+ value.assign (digestBytes.begin (), digestBytes.end ());
61+ } catch (const DigestCalculationException&) {
62+ assert (false );
63+ value.assign (DigestSize, ' \0 ' );
64+ }
5465 }
5566
5667 static std::string hexdigest (const std::string& input) {
57- const auto digestBytes = calculateDigest (input);
58- const std::string digestString (digestBytes.begin (), digestBytes.end ());
59- return utils::string::string_to_hex (digestString);
68+ try {
69+ const auto digestBytes = calculateDigest (input);
70+ return utils::string::string_to_hex (std::string_view (
71+ reinterpret_cast <const char *>(digestBytes.data ()),
72+ digestBytes.size ()));
73+ } catch (const DigestCalculationException&) {
74+ assert (false );
75+ const std::array<unsigned char , DigestSize> digestBytes = {};
76+ return utils::string::string_to_hex (std::string_view (
77+ reinterpret_cast <const char *>(digestBytes.data ()),
78+ digestBytes.size ()));
79+ }
6080 }
6181
6282 private:
0 commit comments