c++ - When to quantify ignored pattern match in the C sscanf function -


ने इस पंक्ति पर मेरे स्रोत कोड में एक पोर्टेबिलिटी समस्या उठाई:

  sscanf (s, "% D% * [,;।% D", & amp; एफ, & amp; ए);  

यह इस संदेश से मिला है:

फ़ील्ड की सीमाओं के बिना scanf को libc के कुछ संस्करणों पर भारी इनपुट डेटा के साथ दुर्घटना हो सकती है।

प्रारूप स्ट्रिंग का मूल इरादा दो पूर्णांक और आज के बीच तीन संभावित सीमिर वर्णों में से एक को स्वीकार करना था - Cppcheck [1] के लिए धन्यवाद - मुझे लगता है कि % * [,।]। सीमिर वर्णों की भी तार स्वीकार करता है हालांकि मुझे शक है कि मेरी प्रारूप स्ट्रिंग एक दुर्घटना का कारण हो सकता है, क्योंकि असीमित हिस्सा नजरअंदाज कर दिया है।

वहाँ संभवतः एक बफर सीमा से अधिक के साथ एक समस्या है? ... शायद पर्दे के पीछे?


[1] दूरदर्शिता और अंधापन के बीच कैसे खोया जाए:

मैंने इसे ठीक करने की कोशिश की % 1 * [,।]। (बाद), लेकिन सीपीकेक ने इस मुद्दे पर जोर दिया, इसलिए मैंने भी % * 1 [,।] उसी "सफलता के साथ की कोशिश की "। लगता है मैं ...

Cppcheck 1.67 में एक बग खोजने के लिए बधाई (अब के लिए यह दबाने के लिए है

आपके पास मूल रूप से तीन कामकाज हैं:

  1. बस गलत सकारात्मक को अनदेखा करें।
  2. अपना प्रारूप दोबारा (असाइन करें फ़ील्ड, संभव है कि आप केवल एक वर्ण से मिलान करना चाहते हैं)।

      चार टीएमपी; यदि (3! = Sscanf (s, "% d% c% d", & amp; एफ, & amp; टीएमपी, & amp; एक) || टीएमपी! = ',' & Amp; amp; टीएमपी! = ';' & Amp; & Amp; टीएमपी! = '।') गोटो त्रुटि;  
  3. सीधे चेतावनी को रोकें (अधिमानतः इनलाइन छिपाता):

      // cppcheck-दबाने invalidscanf_libc अगर (2 = Sscanf (s, "% d% 1 * [,;।% D", & amp; एफ, & amp; ए)) गोटो त्रुटि;  

, के रूप में "दोष / झूठी सकारात्मक" त्रुटि की रिपोर्ट करें ताकि आप जितनी जल्दी रिटायर और उस तरीके को भूल सकता है संभव के रूप में मत भूलना। < / p>


Comments