1111#include < curl/curl.h>
1212#include < fstream>
1313#include < ios>
14+ #include < iterator>
1415#include < sstream>
1516#include < string>
1617#include < type_traits>
@@ -166,7 +167,7 @@ int debugUserFunction(CURL* /*handle*/, curl_infotype type, char* data, size_t s
166167 * std::string input = "Hello World!";
167168 * std::string result = holder.urlEncode(input);
168169 **/
169- std::string urlEncode (const std::string& s) {
170+ util::SecureString urlEncode (std::string_view s) {
170171 const CurlHolder holder; // Create a temporary new holder for URL encoding
171172 return holder.urlEncode (s);
172173}
@@ -181,55 +182,16 @@ std::string urlEncode(const std::string& s) {
181182 * std::string input = "Hello%20World%21";
182183 * std::string result = holder.urlDecode(input);
183184 **/
184- std::string urlDecode (const std::string& s) {
185+ util::SecureString urlDecode (std::string_view s) {
185186 const CurlHolder holder; // Create a temporary new holder for URL decoding
186187 return holder.urlDecode (s);
187188}
188189
189- #if defined(__STDC_LIB_EXT1__)
190- void secureStringClear (std::string& s) {
191- if (s.empty ()) {
192- return ;
193- }
194- memset_s (&s.front (), s.length (), 0 , s.length ());
195- s.clear ();
196- }
197- #elif defined(_WIN32)
198- void secureStringClear (std::string& s) {
199- if (s.empty ()) {
200- return ;
201- }
202- SecureZeroMemory (&s.front (), s.length ());
203- s.clear ();
204- }
205- #else
206- #if defined(__clang__)
207- #pragma clang optimize off // clang
208- #elif defined(__GNUC__) || defined(__MINGW32__) || defined(__MINGW32__) || defined(__MINGW64__)
209- #pragma GCC push_options // g++
210- #pragma GCC optimize("O0") // g++
211- #endif
212- void secureStringClear (std::string& s) {
213- if (s.empty ()) {
214- return ;
215- }
216- // NOLINTNEXTLINE (readability-container-data-pointer)
217- char * ptr = &(s[0 ]);
218- memset (ptr, ' \0 ' , s.length ());
219- s.clear ();
220- }
221-
222- #if defined(__clang__)
223- #pragma clang optimize on // clang
224- #elif defined(__GNUC__) || defined(__MINGW32__) || defined(__MINGW32__) || defined(__MINGW64__)
225- #pragma GCC pop_options // g++
226- #endif
227- #endif
228-
229190bool isTrue (const std::string& s) {
230- std::string temp_string{s};
231- std::transform (temp_string.begin (), temp_string.end (), temp_string.begin (), [](unsigned char c) { return static_cast <unsigned char >(std::tolower (c)); });
232- return temp_string == " true" ;
191+ constexpr std::string_view tmp = " true" ;
192+ auto [s_it, tmp_it] = std::mismatch (s.begin (), s.end (), tmp.begin (), tmp.end (),
193+ [](auto s_c, auto t_c) { return std::tolower (s_c) == t_c; });
194+ return s_it == s.end () && tmp_it == tmp.end ();
233195}
234196
235197time_t sTimestampToT (const std::string& st) {
0 commit comments