upgrade core add header check and incrace upload speed
This commit is contained in:
+96
-3
@@ -167,7 +167,7 @@ std::string uns::tools::ToLower(const std::string& s)
|
||||
return r;
|
||||
}
|
||||
|
||||
std::string uns::tools::CalculateFileHashSHA256(const std::string & file)
|
||||
std::string uns::tools::CalculateFileHashSHA256(const std::string& file)
|
||||
{
|
||||
// 1. 以二进制模式打开文件
|
||||
std::ifstream ifs(file, std::ios::binary);
|
||||
@@ -175,7 +175,7 @@ std::string uns::tools::CalculateFileHashSHA256(const std::string & file)
|
||||
return std::string();
|
||||
// 2. 初始化 OpenSSL EVP 上下文,使用智能指针自动管理内存释放
|
||||
std::unique_ptr<EVP_MD_CTX, void(*)(EVP_MD_CTX*)> ctx(EVP_MD_CTX_new(), EVP_MD_CTX_free);
|
||||
if (!ctx)
|
||||
if (!ctx)
|
||||
return std::string();
|
||||
// 3. 指定使用 SHA256 算法
|
||||
if (EVP_DigestInit_ex(ctx.get(), EVP_sha256(), nullptr) != 1)
|
||||
@@ -205,7 +205,100 @@ std::string uns::tools::CalculateFileHashSHA256(const std::string & file)
|
||||
return hex_result;
|
||||
}
|
||||
|
||||
bool uns::secure::IsSafePath(const std::string & safe_path, const std::string & requested_path)
|
||||
Json::Value uns::tools::SafeJsonDecode(const std::string& str)
|
||||
{
|
||||
try
|
||||
{
|
||||
Json::Value root;
|
||||
Json::Reader reader;
|
||||
if (!reader.parse(str, root, false))
|
||||
return Json::nullValue;
|
||||
else
|
||||
return root;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return Json::nullValue;
|
||||
}
|
||||
}
|
||||
|
||||
namespace
|
||||
{
|
||||
template <typename> inline constexpr bool always_false_v = false;
|
||||
|
||||
template <typename T, typename CharT>
|
||||
T do_sto(const std::basic_string<CharT>& str, std::size_t* pos, int base)
|
||||
{
|
||||
if constexpr (std::is_same_v<T, int>)
|
||||
return std::stoi(str, pos, base);
|
||||
else if constexpr (std::is_same_v<T, long>)
|
||||
return std::stol(str, pos, base);
|
||||
else if constexpr (std::is_same_v<T, long long>)
|
||||
return std::stoll(str, pos, base);
|
||||
else if constexpr (std::is_same_v<T, unsigned long>)
|
||||
return std::stoul(str, pos, base);
|
||||
else if constexpr (std::is_same_v<T, unsigned long long>)
|
||||
return std::stoull(str, pos, base);
|
||||
else if constexpr (std::is_same_v<T, float>)
|
||||
return std::stof(str, pos);
|
||||
else if constexpr (std::is_same_v<T, double>)
|
||||
return std::stod(str, pos);
|
||||
else if constexpr (std::is_same_v<T, long double>)
|
||||
return std::stold(str, pos);
|
||||
else
|
||||
static_assert(always_false_v<T>, "不支持的转换类型!");
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T, typename CharT>
|
||||
std::optional<T> uns::tools::SafeStoX(const std::basic_string<CharT>& str, std::size_t* pos, int base)
|
||||
{
|
||||
try
|
||||
{
|
||||
return do_sto<T>(str, pos, base);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T, typename CharT>
|
||||
std::optional<T> uns::tools::SafeStoX(std::basic_string_view<CharT> str, std::size_t* pos, int base)
|
||||
{
|
||||
return SafeStoX<T>(std::basic_string<CharT>(str), pos, base);
|
||||
}
|
||||
|
||||
bool uns::secure::IsSafePath(const std::string& safe_path, const std::string& requested_path)
|
||||
{
|
||||
return PathTraversal::IsSafePath(safe_path, requested_path);
|
||||
}
|
||||
|
||||
namespace uns
|
||||
{
|
||||
namespace tools
|
||||
{
|
||||
// -------------------------------------------------------------
|
||||
// 显式模板实例化(注意:必须放在命名空间内部!)
|
||||
// -------------------------------------------------------------
|
||||
#define INSTANTIATE_SAFE_STO(T, CharT) \
|
||||
template std::optional<T> UNSWSC_DLL_EXPORT SafeStoX<T, CharT>(const std::basic_string<CharT>&, std::size_t*, int); \
|
||||
template std::optional<T> UNSWSC_DLL_EXPORT SafeStoX<T, CharT>(std::basic_string_view<CharT>, std::size_t*, int);
|
||||
|
||||
#define INSTANTIATE_ALL_NUMERIC_TYPES(CharT) \
|
||||
INSTANTIATE_SAFE_STO(int, CharT) \
|
||||
INSTANTIATE_SAFE_STO(long, CharT) \
|
||||
INSTANTIATE_SAFE_STO(long long, CharT) \
|
||||
INSTANTIATE_SAFE_STO(unsigned long, CharT) \
|
||||
INSTANTIATE_SAFE_STO(unsigned long long, CharT) \
|
||||
INSTANTIATE_SAFE_STO(float, CharT) \
|
||||
INSTANTIATE_SAFE_STO(double, CharT) \
|
||||
INSTANTIATE_SAFE_STO(long double, CharT)
|
||||
|
||||
INSTANTIATE_ALL_NUMERIC_TYPES(char)
|
||||
INSTANTIATE_ALL_NUMERIC_TYPES(wchar_t)
|
||||
|
||||
#undef INSTANTIATE_ALL_NUMERIC_TYPES
|
||||
#undef INSTANTIATE_SAFE_STO
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user