[so] [Tema2][Windows] Warnings

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Sat Apr 18 19:47:26 EEST 2009


On Sat, 2009-04-18 at 19:09 +0300, Lucian Adrian Grijincu wrote:
> 2009/4/18 Bogdan Sass <bogdan.sass at catc.ro>:
<snip>
> >   Asigura-te ca nu e altceva prin cod care sa incerce sa copieze/scrie
> > intr-un sir mai mult sau mai putin decat ar trebui :)
> 
> Avertismentele alea nu au legătură cu probleme reale din cod. Codul
> poate fi perfect, dar dacă compilatorul detectează că s-au folosit
> funcțiile alea, emite un avertisment pentru că dpdv statistic sunt
> unele din funcțiile care duc la cele mai multe probleme. Variantele _s
> sunt impuse intern în Microsoft de ceva timp, și ei au considerat că
> ar fi bine să încerce să convingă și programatorii din afara companiei
> să folosească variantele mai sigure.

In mod normal, functiile din familia str* sunt evil ("considered
harmful")[1]. Singurele care fac exceptie sunt strlen si strdup. La
strcpy exista alternativele strncpy[2], strlcpy[3] si strcpy_s[4].
Totusi chiar si acestea pot avea probleme[5].

Ideea de baza este ca trebuie sa stiti _tot_ timpul dimensiunea sirului.
Sirurile trebuie validate, altfel vor fi cauza multor probleme (in
special buffer overflow-uri)[6].

In general eu acord sfatul: "Daca nu aveti cunoastere deplina a
functiilor din familia str*, nu le folositi. Folositi memcpy."

Razvan

[1] https://buildsecurityin.us-cert.gov/daisy/bsi/articles/knowledge/coding/313-BSI.html
[2] http://www.kernel.org/doc/man-pages/online/pages/man3/strncpy.3.html
[3] http://www.openbsd.org/cgi-bin/man.cgi?query=strlcpy
[4] http://msdn.microsoft.com/en-us/library/td1esda9(VS.80).aspx
[5] http://sources.redhat.com/ml/libc-alpha/2000-08/msg00053.html
[6] http://seclists.org/basics/2004/Jul/0186.html



More information about the so mailing list