From 67d9b6f5f933e95b95a568de7276bd44bd38c1d9 Mon Sep 17 00:00:00 2001 From: scc Date: Thu, 13 Nov 2025 18:41:09 +0800 Subject: [PATCH] Fix ESIGN memcpy null pointer and clang22 fortify warning (#1338) - Use seed.data() instead of pointer arithmetic for static analyzer - Add CRYPTOPP_ASSERT to verify bounds explicitly - Guard memcpy against null pointer when seedParam.size() == 0 Resolves UBSan violation and clang22 -O3 fortify warning. Fixes #1338 --- esign.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/esign.cpp b/esign.cpp index 5bcbbe973..b84ab1b83 100644 --- a/esign.cpp +++ b/esign.cpp @@ -115,7 +115,11 @@ void InvertibleESIGNFunction::GenerateRandom(RandomNumberGenerator &rng, const N throw InvalidArgument("InvertibleESIGNFunction::GenerateRandom: buffer overflow"); seed.resize(seedParam.size() + 4); - std::memcpy(seed + 4, seedParam.begin(), seedParam.size()); + // Help static analyzer verify bounds (Issue #1338) + CRYPTOPP_ASSERT(seed.size() >= seedParam.size() + 4); + // Guard against null pointer when size is 0 (UBSan) + if (seedParam.size() > 0) + std::memcpy(seed + 4, seedParam.begin(), seedParam.size()); PutWord(false, BIG_ENDIAN_ORDER, seed, (word32)0); m_p.GenerateRandom(rng, CombinedNameValuePairs(primeParam, MakeParameters("Seed", ConstByteArrayParameter(seed))));