1 mesaj
Administrator Administrator
  • Mesaje: 3932
  • Reacții: 72828
  • Mesaje utile: 38
  • Status: Pe aici.. 🤠
  • Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Contact:
    *Descriere:

    Un fix pentru un posibil buffer overflow in shop.cpp: bufferul char name[36] este prea mic pentru stringul formatat, iar daca textul rezultat are exact 36 de caractere (sau mai multe), nu mai ramane loc pentru terminatorul \0, astfel sys_log poate citi mai departe din memorie si afisa caractere random sau chiar provoca un crash; solutia este marirea bufferului (de exemplu char name[512]) pentru a asigura terminarea corecta a stringului.

    *Link download / Code:

    Problema: In shop.cpp exista urmatorul cod:
    Code:
            char name[36];
            snprintf(name, sizeof(name), "%-20s(#%-5d) (x %d)", item_table->szName, (int) item.vnum, item.count);
            sys_log(0, "SHOP_ITEM: %-36s PRICE %-5d", name, item.price);
    
    Explicatie pe scurt:

    1) Se creeaza un char array pe stack cu dimensiunea 36. Asta inseamna maxim 35 caractere + '\0' (terminatorul de string).

    2) snprintf scrie string-ul formatat in acest buffer.

    3) sys_log afiseaza string-ul, citind din memorie pana la primul '\0'.

    Problema apare cand string-ul formatat are EXACT 36 caractere (fara '\0').
    In acest caz, conform comportamentului snprintf:

    - daca lungimea este egala cu dimensiunea bufferului,
    - NU se mai adauga '\0'.

    Rezultatul: string-ul nu este null-terminated, iar la afisare se vor citi caractere random din memorie pana cand se gaseste accidental un '\0'.
    Asta poate duce la comportament imprevizibil sau chiar crash.

    Exemplu problematic:
    Code:
    Zen-Bohne           (#70102) (x 100)
    
    Acest string are exact 36 caractere → nu mai exista loc pentru terminator.

    Fix: Deschidem game/src/shop.cpp si cautam:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Inlocuim cu:

    Conținut: Ascuns
    Reacționează ❤️ la acest mesaj și conținutul se va afișa automat.


    Explicatie:

    Marim bufferul la 512 pentru a elimina riscul de lipsa a terminatorului '\0'.
    Desi folosim mai mult stack temporar, este complet sigur deoarece memoria este eliberata automat la iesirea din functie.

    Nou Cum descarc de pe TeraBox?

    Afișează detalii Ascunde detalii
    • Este asemănător cu Mega.nz
    • Instalați-vă clientul lor de Download de aici
    • Faceți-vă un cont (vă puteți loga cu Facebook / Google / etc)
    • Nou Dacă nu vreți să descărcați clientul de Download, folosiți acest site
    • Gata! Acum puteți descărca resursele rapid & simplu.

    De ce folosim TeraBox?

    • Este gratuit
    • Primești 1TB de spațiu gratuit la orice cont creat!
    • Este ușor de folosit și varianta premium este foarte ieftină
    • Fișierele nu sunt șterse niciodată
    TeraBox logo
    Te asteptam si pe serverul de Discord :p - aici ne-am strans toata comunitatea de Metin2 din Romania.
    Link: https://discord.gg/jWxeDSf7HP

    Suntem aproape 2000 membri! - Avem chat activ zilnic, support, cereri, resurse. :D :ymcowboy:




    See full signature

    📢 Resurse Metin2 Premium!

    Zeci de resurse Metin2 Premium - exclusive și 100% funcționale începând cu 15.99€!.

    Vezi resursele Cumpără premium
    Premium
    Premium
    Anunț

    Creează-ți un cont sau autentifică-te pentru a participa la discuție

    Trebuie să fii membru pentru a răspunde

    Creează-ți un cont

    Membrii pot crea subiecte noi și pot descărca resurse Metin2 Gratuit!


    Te poți înregistra sau conecta rapid utilizând contul tău de Discord, Github sau Google.

    Înregistrare

    Autentifică-te

    Înapoi la “FIX-uri”

    Informații

    Utilizatori ce navighează pe acest forum: [HF]White, Amazon [Bot], DnD, kix, xbobolinox și 6 vizitatori

    Discord ID copiat: