Signed/Unsigned Confusion
সাইনড/আনসাইনড কনফিউশন
একটা signed length-check ঋণাত্মক মান আটকাতে ব্যর্থ হয়, আর সেই একই bit-pattern পরে memcpy-জাতীয় ফাংশনের unsigned size_t প্যারামিটারে পৌঁছে একটা বিশাল ধনাত্মক সংখ্যায় পুনর্ব্যাখ্যাত হয়।
also: sign-confusion, unsigned-wraparound-bypass
requested_len = -1 (signed int)
check: requested_len > max_len -> false (signed domain-এ -1 সবসময় ছোট)
memcpy(dst, src, requested_len) ← তৃতীয় প্যারামিটার size_t (unsigned)
একই bit-pattern, unsigned হিসেবে পড়া হলে: 0xFFFFFFFF = 4,294,967,295
- CWE-191 (Integer Underflow)-এর ঘনিষ্ঠ আত্মীয় — কোনো বিট হারায় না, শুধু একই bit-pattern দুই ভিন্ন টাইপ-নিয়মে দুইবার পড়া হয়
- ফিক্স কোনো নতুন গণিত না — শুধু negative-এর জন্য একটা আলাদা, upper-bound-check-এর ওপর নির্ভর না করা explicit চেক
- 64-bit সিস্টেমেও ঝুঁকি থাকে: একই
-1, 64-bitsize_t-এ প্রায় ১৮.৪ কুইন্টিলিয়ন byte-এ পুনর্ব্যাখ্যাত হয়