मैं एक विशेषज्ञता है कि प्रदर्शन के साथ एक टेम्पलेट समारोह है zeroization:"संदिग्ध आकार" या SIZEOF_MISMATCH खोज के लिए कवरिटी को कैसे प्रशिक्षित किया जाए?
template <class T>
void SecureWipeBuffer(T *buf, size_t n)
{
volatile T *p = buf+n;
while (n--)
*((volatile T*)(--p)) = 0;
}
...
template <>
void SecureWipeBuffer(word64* p, size_t n)
{
asm volatile("rep stosq" : "+c"(n), "+D"(p) : "a"(0) : "memory");
}
Coverity SecureWipeBuffer
पर एक खोज का निर्माण किया जाता है:
word64 val;
...
SecureWipeBuffer(&val, 1);
लग रहा है:
>>> CID 164713: Incorrect expression (SIZEOF_MISMATCH)
>>> Passing argument "&val" of type "word64 *" and argument "1UL" to function "SecureWipeBuffer" is suspicious because "sizeof (word64)" /*8*/ is expected.
275 SecureWipeBuffer(&val, 1);
कैसे ट्रेन करना कवरेज SecureWipeBuffer
तत्वों की एक गिनती लेता है, और बाइट्स की गिनती नहीं है?
संपादित: हम अपने विंडोज कोड के साथ दो इसी तरह के निष्कर्षों उठाया गया है। इसके अलावा, कवरिटी मानक लाइब्रेरी कार्यों पर निष्कर्ष निकाल रही है। ऐसा लगता है कि यह सी ++ तत्वों की संख्या के साथ सौदों का एहसास नहीं करता है, और बाइट्स की गणना नहीं करता है।
नीचे <xmemory>
25 if (_Count == 0)
26 ;
27 else if (((size_t)(-1)/sizeof (_Ty) < _Count)
CID 12348 (#1 of 1): Wrong sizeof argument (SIZEOF_MISMATCH)
suspicious_sizeof: Passing argument _Count * 4U /* sizeof (std::allocator<void *>::value_type) */
to function operator new which returns a value of type std::allocator<void *>::value_type is suspicious.
28 || (_Ptr = ::operator new(_Count * sizeof (_Ty))) == 0)
29 _Xbad_alloc(); // report no memory
'--p' में पहले से ही 'अस्थिर टी *' प्रकार है, इसलिए कास्ट अनावश्यक है –
यदि आप अनजान हैं, तो गैर-विशिष्ट संस्करण में, मानक' अस्थिर 'को अनुकूलित करने की अनुमति देता है और कंपाइलर इसे एक मेमसेट कॉल के साथ भी बदल सकता है। (अस्थिर वस्तुओं तक पहुंच को संरक्षित करने के बारे में नियम केवल यही है; अस्थिर-योग्य पॉइंटर्स के माध्यम से नहीं पहुंचता है)। –
@ एमएम - * "' --p' में पहले से ही 'अस्थिर टी * 'प्रकार है, इसलिए कास्ट अनावश्यक है" * - आपको लगता है कि, लेकिन जीसीसी के दो संस्करणों की अपेक्षा करने में असफल रहा है। अप्रत्याशित चीजें करने वाले कंपाइलर्स यही कारण है कि हमें उस लूप को रिवर्स में भी चलाने की ज़रूरत है। यह लगभग हर प्रमुख मंच पर 20 साल के कंपाइलरों का समर्थन करने की खुशी में से एक है। – jww