[so] Warning-uri si alte probleme
Razvan Deaconescu
razvand at cs.pub.ro
Sun Nov 25 02:33:41 EET 2007
On Sun, 2007-11-25 at 02:19 +0200, Lucian Adrian Grijincu wrote:
> On Nov 25, 2007 1:29 AM, Dan Badea <dan.badea at microsoft-lab.pub.ro> wrote:
> >
> >
> > Nu stiu despre altii, dar eu nu am invatat in facultatea asta despre alte
> > functii de concatenare decat strcat asa ca nu am de gand sa folosesc altele
> > pentru teme.
>
> Disclaimer: eu am citit pana aici si mie mi-e de ajuns.
> Eu nu am invatat la facultate de strcat. Am avut nevoie de functia
> asta cand imi faceam temele, dar nu mi-a "predat-o" nimeni. Dupa
> atitudinea ta as zice ca nu prea stii ce-i aia buffer-overrun si de ce
> e asta o sursa canonica de vulnerabilitati care duc la exploituri
> (impreuna cu prietenii de cataramă strcpy, gets, ș.a.).
>
> Iti recomand cartea asta: http://www.microsoft.com/mspress/books/8753.aspx
> Dupa adresa ta de email presupun ca faci parte din stafful
> laboratorului Microsoft, si presupun ca poti face rost de cartea asta
> fara sa cheltui vre-un ban.
>
> Atitudinea asta: "n-am mai facut asa ceva, asa ca n-o sa fac acum, who
> are you to tell me what to do?" nu e foarte sanatoasa on the long run.
> Daca cineva iti spune ca s-ar putea sa gresesti și țipă la tine (in
> cazul asta compilatorul de la Microsoft) ar trebui sa te intrebi daca
> are dreptate si daca chiar exista o problema in codul tau. In loc sa
> stai sa scrii mesajul asta puteai sa stai cateva minute sa cauti pe
> net sa vezi de ce e strcat considerata "bad practice".
>
> Chiar warning-ul respectiv iti recomanda functia strcat_s
> http://msdn2.microsoft.com/en-US/library/d45bbxx4(VS.80).aspx
> aici aici si un model de utilizare:
>
> char buf[16];
> strcpy_s(buf, 16, "Start");
> strcat_s(buf, 16, " End"); // Correct
> strcat_s(buf, 16 – strlen(buf), " End"); // Incorrect
>
> Mai exista o varianta imbunatatita a lui strcat: strncat.
> strcpy are si el un văr imbunatatit, strncpy.
>
> Make them your friends :)
De fapt, nici strcat, nici strncat, nici strlcat[1] nu sunt chiar
sigure. Lucrul cu functii pentru siruri este de multe ori nerecomandat.
Sfatul expertilor[2][3] este sa se foloseasca memcpy & friends (trebuie
sa stii tot timpul dimensiunea unui sir).
Razvan
[1] http://www.usenix.org/events/usenix99/millert.html
[2] http://sourceware.org/ml/libc-alpha/2000-08/msg00061.html
[3] http://www.ecos.sourceware.org/ml/libc-alpha/2002-01/msg00147.html
More information about the so
mailing list