Projekti Curl ka hequr dorë nga përdorimi i funksionit strcpy në kodin e tij

Daniel Stenberg, autori i utilitarit për të marrë dhe dërguar të dhëna përmes rrjetit curl, shpalli ndalimin e përdorimit të funksionit strcpy() në bazën e kodit të projektit dhe ndalimin e përdorimit të këtij funksioni në të ardhmen. Ky vendim është një vazhdim i heqjes së funksionit strncpy(), i cili kopjon një numër të caktuar bajtesh nga stringu hyrës. Përdorimi i strncpy() kishte krijuar rrezik për ndodhi gabimesh për shkak të humbjes së simbolit null në fund të stringut ose mbushjes së paracaktuar me zeros.

Thirrjet për strncpy() u zëvendësuan me funksionin strcpy(), përpara thirrjes së të cilit u krye alokimi i memorjes për tamponin e synuar duke pasur parasysh madhësinë e stringut hyrës ose kishte kontroll mbi përputhshmërinë e madhësisë së stringut hyrës dhe tamponit të synuar. Zëvendësimi me funksionin strlcpy() nuk u krye, sepse ishte e nevojshme të kopjohej gjithmonë e gjithë stringu në tërësi ose të kthehej një gabim.

Tani të gjitha thirrjet e strcpy() janë zëvendësuar me funksionin e ri curlx_strcopy(dest, dsize, src, slen). Funksioni curlx_strcopy() kërkon caktimin e madhësisë së tamponit hyrës dhe atij të synuar, duke llogaritur që tamponi i synuar duhet të jetë më i madh se ai hyrës për të akomoduar simbolin null në fund të stringut, i cili detyrohet të shtohet në fund për të shmangur humbjen e tij gjatë kopjimit. Nëse madhësia e tamponit të synuar është më e madhe se zero, por e pamjaftueshme për të kopjuar stringun e synuar, atëherë një bajt null shtohet në fillim. void curlx_strcopy(char *dest, size_t dsize, const char *src, size_t slen) { DEBUGASSERT(slen < dsize); if(slen < dsize) { memcpy(dest, src, slen); dest[slen] = 0; } else if(dsize) dest[0] = 0; }

Zëvendësimi i strcpy() me curlx_strcopy() u bë sepse ekziston mundësia e gabimit njerëzor, i cili çon në ndarjen e kodit me kontrollin/akordimin e memorjes dhe thirrjen e strcpy(), për shembull, gjatë një transferimi të menduar keq të vetëm një pjese të kodit ose ngjitjes së kodit midis kontrollit dhe thirrjes së strcpy(). Përveç kësaj, ndalimi i përdorimit të strcpy do të ndihmojë në eliminimin e fluskave të rreme të njoftimeve për cenueshmëri për shkak të aktiveve të gabuara të veglave AI, të cilat e konsiderojnë praninë e strcpy si mundësi të cenueshmërisë pa marrë parasysh kontrollin që ekziston në kod.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster