From f8d710a91993b2ee839da9f365d5e23a4d033e1b Mon Sep 17 00:00:00 2001 From: Fei Deng Date: Wed, 20 Nov 2019 15:44:40 -0600 Subject: [PATCH] fix stringstream crash during shutdown --- .../ssl_session_reuse/src/common.cc | 21 +++++++++++-------- .../ssl_session_reuse/src/common.h | 3 +-- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/plugins/experimental/ssl_session_reuse/src/common.cc b/plugins/experimental/ssl_session_reuse/src/common.cc index e552c5a2b0d..581f6f91fbf 100644 --- a/plugins/experimental/ssl_session_reuse/src/common.cc +++ b/plugins/experimental/ssl_session_reuse/src/common.cc @@ -30,18 +30,21 @@ #include "common.h" -const unsigned char salt[] = {115, 97, 108, 117, 0, 85, 137, 229}; +const unsigned char salt[] = {115, 97, 108, 117, 0, 85, 137, 229}; +const unsigned char hex_chars[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; std::string -hex_str(std::string str) +hex_str(std::string const &str) { - std::string hex_str = ""; - for (char &c : str) { - std::stringstream stream; - stream << std::hex << std::setfill('0') << std::setw(2) << (0xFF & static_cast(c)); - hex_str += stream.str(); - } - return hex_str; + size_t len = str.size() * 2 + 1; + char hex_str[len]; + for (unsigned long int i = 0; i < str.size(); ++i) { + unsigned char c = str.at(i); + hex_str[i * 2] = hex_chars[(c & 0xF0) >> 4]; + hex_str[i * 2 + 1] = hex_chars[(c & 0x0F)]; + } + hex_str[len] = '\0'; + return std::string(hex_str, len); } int diff --git a/plugins/experimental/ssl_session_reuse/src/common.h b/plugins/experimental/ssl_session_reuse/src/common.h index bcec00b0669..377d9fc6fb0 100644 --- a/plugins/experimental/ssl_session_reuse/src/common.h +++ b/plugins/experimental/ssl_session_reuse/src/common.h @@ -24,7 +24,6 @@ #pragma once #include -#include #include #include #include @@ -70,7 +69,7 @@ class PluginThreads std::mutex threads_mutex; }; -std::string hex_str(std::string str); +std::string hex_str(std::string const &str); int encrypt_encode64(const unsigned char *key, int key_length, const unsigned char *in_data, int in_data_len, char *out_data, size_t out_data_size, size_t *out_data_len);