( TCH | 2020. 09. 25., p – 18:44 )

> Azt mondanám, hogy ami validáció nem triviális vagy úgy gondoljuk, hogy változhat vagy több helyen is szükség van ugyanarra a szabályrendszer szerinti validációra, akkor kiszervezném.

Ez rendben is van, de te itt komplex dolgok validációjáról beszélsz, azt nyilván érdemes kiszervezni, már csak azért is, mert ha "központilag" van a validátorod, akkor nem fogod elkövetni azt a hibát, hogy a validálás N ponton történik, de ebből X ponton hibás, mert typo... Viszont itt nem ilyen szintű dolgokról volt szó, hanem olyanokról, mint azon a bizonyos screenshoton, ahol a validáció kb. kimerült volna egy db if-ben, ill. a segédfüggvényeknek átadott pointerek NULL-checkjéről, ami dettó kb. egy sor.

> Én azt mondom, hogy ha van egy jól felépített (mielőtt random CVE-ket linkelsz, ez szükséges feltétel!) architektúra, akkor nem kell minden egyes pontján végrehajtani ugyanazokat az ellenőrzéseket.

Hogyne! De ez akkor azzal is jár, hogy a kóderek betartják az írott és íratlan konvenciókat és a kód a 0. sortól az utolsóig auditálva van. Úgy nyilván csak a bejövő, ill. menet közben keletkező adatokat kell validálni. Csakhogy nem ez szokott lenni. És ilyenkor jön be a jobb félni, mint rákefélni. A screenshoton linkelt figyelmeztetés helyett is beírhatták volna azt az egy sornyi lekezelést és preventálhatták volna a belinkelt CVE-t. Ott sem volt meg az az integráltság, amiről te beszélsz.

> az is lehet egy teljesen jó megközelítés, hogy a függvényed dokumentáltan exception ágra is futhat, aztán majd a hívó fél kezd vele, amit akar.

C-ben exception? Ott olyan nincsen, csak crash, meg egyéb nem várt következmény. Ha exception alatt azt értetted, hogy hibakódot ad vissza, az oké, de akkor csak neked kell lekezelned a dolgot.

> Bevallom, a random idelinkelt sebezhetőségekkel és bugokkal nem nagyon foglalkoztam, mert C-ben csak nagyon minimálisan kellett dolgoznom eddig.

Random...? Pont az általad emlegetett screenshottal kapcsolatban linkeltem be egy sérülékenységet, arra kaptál CVE-t, amire hivatkoztál, ez minden csak nem random...

> Design patternekről tudok beszélgetni, de a C nyelv rejtelmeit hadd ne kelljen most megismernem. :D

Kelleni nem kell, csak ha egy C-kódban történő validáció szükségességét illetően szeretnél szakmai véleményt adni, akkor nem árt, lol. :P (Mert ugye ezt tetted, mert ez volt a téma a screenshottal és a libc függvényeivel.)

> Mindenesetre volt olyan munkám, ahol egy szimulációt kellett (tök azonos inputokkal) lefuttatni rengetegszer, órákban volt mérhető a különbség amit az ilyen tizedmásodperces feladatok átcsoportosításával le lehetett faragni. Nyilván itt jön be az, amit az előbb mondtam, hogy rendesen dokumentált környezetben dolgoztunk, nem kellett attól aggódni, hogy a százmillió task mellé elindít valaki még százmilliót nullpointerekkel meg február 30-ával.

Ezt kiveséztük. Csak annyit tennék hozzá, hogy egy interval-check, vagy egy NULL-check, az egy komparálás és egy feltételes ugrás gépi kódban, ami CPU-tól függően ugyan, de majdnem biztosan kevesebb, mint 10 CPU-ciklus, ami pl. 4 GHz-es órajel esetén olyan 2.5 ns körül mozog, vagyis egy ilyen validálás ennél kevesebb időt eszik. Ha akarod, számold ki, hogy mennyi ilyen validáció kellene ahhoz, hogy a különbség érezhető legyen.