BUGFIX | Overflow in d.spawn_mob_ac_dir.

  • Hallo,


    Erklärung:

    Die Funktion d.spawn_mob_ac_dir(vnum, x, y, dir) spawnt eine Instanz 'vnum' in den lokalen Koordinaten 'x' und 'y' mit der Richtung 'dir'.

    Der Datentyp von 'dir' in der folgenden Funktion ist BYTE => unsigned char => Wertebereich geht von 0 - 255. Möglich für die Variable dir wären 0 - 360 Grad.

    Gibt man nun einen Wert zwischen 255 und 360 (Grad) an, dann wird der Wertebereich des Datentyps 'unsigned char' überschritten (Overflow).


    Beim FIX stelle ich den Datentyp dieser Variable auf DWORD => typedef für 'unsigned int' => Ganz viel größere Werte (0 bis etwa 4.3 Milliarden).

    Für mehr Infos: Bitte melden Sie sich an, um diesen Link zu sehen.


    Tutorial zum Fixxen:


    game/src/questlua_dungeon.cpp:

    Suche folgende Zeile:

    Code
    1. BYTE dir = (int) lua_tonumber(L, 4);


    und ersetze sie mit:

    Code
    1. DWORD dir = (DWORD) lua_tonumber(L, 4);


    in der Funktion:

    Code
    1. ALUA(dungeon_spawn_mob_ac_dir)
    2. {
    3.             [...]
    4. BYTE dir = (int) lua_tonumber(L, 4);
    5.        }


    War mir nur grad aufgefallen, außer mir nutzt die Funktion wahrscheinlich eh keiner. Aber falls doch: Gerngeschehen.


    MfG

  • Dieses Thema enthält 9 weitere Beiträge, die nur für registrierte Benutzer sichtbar sind, bitte registrieren Sie sich oder melden Sie sich an um diese lesen zu können.