[so] Warning-uri si alte probleme

Dan Badea dan.badea at microsoft-lab.pub.ro
Sun Nov 25 11:04:03 EET 2007


Buna ziua,

Va multumesc pentru recomandari. Din fericire am o copie personala a cartii pe care mi-ati recomandat-o. Va multumesc si pentru articole, toate sunt foarte interesante.

Sa trecem totusi inapoi la oile noastre care nu sunt functia strcat in sine, ci depunctarea automata care este facuta pentru teme si care duce la bad practices (si anume suprimare de warning-uri).

Am atasat un exemplu care compilat cu g++ sub linux nu produce nici un warning (-Wall). De aici, sa inteleg ca strcat este deprecated numai pentru Windows? Sau mai bine sa inteleg ca strcat e deprecated doar pt compilatorul  Microsoft, iar pentru cel al GNU nu?

Acum ca sa revin la sugestiile de lectura care mi s-au facut. In primul rand este vorba despre o tema la SO (si cum bine stiti avem multe teme), iar daca as sta sa citesc cate mi s-au recomandat pentru fiecare "problema" care apare, probabil ca, desi as invata foarte multe, nu as mai termina niciodata TOATE temele. Nu este normal ca atitudinea reprezentantilor facultatii sa fie aceea in care esti mereu impins spre lectura personala. Credeti-ma ca am facut destula de acest gen si majoritatea cunostintelor pe care le-am dobandit se bazeaza pe acest mod de a invata. Insa nu este deloc normal ca studentul sa fie mereu pus sa "descopere"/invete singur. Nu venim la scoala ca sa alfam totul din alte surse. Daca considerati ca acest subiect merita atentie, si ca studentii ar trebui sa stie ca strcat nu este bine de folosit atunci ar trebui sa se vorbeasca despre asta. Dar, dimpotriva aceasta este functia care ne-a fost predata. In concluzie, va rog sa nu apelati la cunostinte pe care studentul trebuie sa dobandeasca singur atunci cand propuneti (sau corectati/depunctati) o tema. 

Cerinta mea de a nu fi depunctat pentru acelasi warning de 4 ori si pentru un warning care apare numai pe anumite compilatoare si pe altele nu mi se pare cat se poate de bun simt.

Revenind la strcat va asigur ca din moment ce l-am folosit cunosc foarte bine modul in care el functioneaza si dependenta acestei functii de terminatorul de sir. Evident ca atunci cand am scris aceasta parte a codului am fost atent in a nu face concatenari aiurea. Mai mult in cazul in care nu as fi fost atent as fi beneficiat de niste neplacute erori de rulare care m-ar fi impiedicat sa trec vre-un test. Prin urmare nu vad absolut nici un motiv pentru care era mai indicat sa citesc o carte si cateva articole pentru a face o operatie simpla, cand defapt cel mai simplu era sa aplic ce am invatat si sa fac asta corect.

Din cate vad toata lumea este foarte multumita de acest sistem de depuncatre automata, dar am sa fac o sugestie in legatura cu imbunatatirea lui. Macar sa verifice daca este vorba despre acelasi warning si sa nu depuncteze de fiecare data. Practic daca tema ar fi presupus un numar mai mare de concaternari (gen 50) puteam sa nici nu ma obosesc sa o trimit.

Si in final, foarte bine, daca vreti sa corectati temele automat, nici o problema, dar ca si in viata si aici exista exceptii. Aceasta in mod clar este una si mi se pare cat se poate de normal sa nu primesc nici o penalizare.

Astept niste raspunsuri si legat de a doua parte a mail-uli precedent.

Cu bine,
Dan Badea


-----Original Message-----
From: so-bounces at cursuri.cs.pub.ro [mailto:so-bounces at cursuri.cs.pub.ro] On Behalf Of Razvan Deaconescu
Sent: Sunday, November 25, 2007 2:34 AM
To: Sisteme de Operare
Subject: Re: [so] Warning-uri si alte probleme

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

_______________________________________________
so mailing list
so at cursuri.cs.pub.ro
http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.cpp
Type: application/octet-stream
Size: 281 bytes
Desc: test.cpp
Url : http://cursuri.cs.pub.ro/pipermail/so/attachments/20071125/f308f217/test.obj


More information about the so mailing list