Kein Wunder dass C so verschrien ist...

2005年09月26日 (月曜日) 00時31分

... wenn die Leute so verschissenen Code schreiben, brauchen sie sich auch nicht wundern wenn jeden Tag zig neue Sicherheitslöcher gefunden werden.

client/src/commands.c:
[...]
void SkilllistCmd(unsigned char *data, int len)
{

    char *tmp, *tmp2, *tmp3, *tmp4;
[...]
            strncpy(name, data , (uint32)tmp2-(uint32)data );
[...]
  

Quelle: Daimonin MMORPG»

Von der "kreativen" Indentation mal abgesehen - HACKTS? Ratet mal was passiert, wenn man versucht, Daimonin auf x86-64 zu spielen. Richtig, es SEGVed noch im Ladebildschirm!

Dass der Code überhaupt irgendwo funktioniert ist schon ein Wunder an sich. Die Verwendung von unsigned char * und char * wechselt im Code frei Schnauze. Und wenn die beiden aufeinandertreffen, castet man halt schnell auf uint32. Nein, nicht uint32_t, wie man es in jeder anständigen stdint.h findet, uint32 muss es sein. Schon mal was von ptrdiff_t gehört? Nein? Liegt vielleicht daran, dass stdlib.h gleich gar nicht eingebunden wird! Und malloc, free, strtoul etc. legt der Weihnachtsmann unter den Baum.

Es wird gemeinhin behauptet, es wäre nicht möglich, 100% sicheren Code zu schreiben. Das ist Schwachsinn, Microsoft deluxe. Es ist vielleicht nicht einfach, aber wer's nicht kann soll bitte nicht C nehmen.


Nachtrag: Anscheinend liefert der Server sowieso gerade nur Null-Bytes statt Charakterdaten, was den Client mangels Fehlerbehandlung in die nächste SEGV schickt.

Kommentareintrag:

Ist nicht gesagt

2005年10月08日 (土曜日) 20時17分