Administrator
Administrator
  • Mesaje: 4795
    Membru din: 07 Aug 2024, 21:53
  • Reacții: 115427
  • Mesaje utile: 46
  • Status: Pe aici.. 🤠
    Server: Saga2 - Soon
  • Regat: Jinno
  • [ID Discord]
  • Contact:
    *Descriere:

    Metin2 UB Fix - Iterator Invalidation in for_each_entity

    Acest fix elimina un bug din functia for_each_entity, produs atunci cand un iterator este sters din m_set_entity si apoi incrementat de bucla for.

    Problema apare deoarece erase(it) invalideaza iteratorul curent, iar executia continua cu ++it pe un iterator care nu mai este valid.

    - elimina iterator invalidation;
    - previne Undefined Behavior;
    - curata entitatile invalide din m_set_entity;
    - foloseste std::erase_if pentru eliminare sigura;
    - foloseste std::ranges::for_each pentru iterarea entitatilor ramase;
    - implementare bazata pe C++20.


    *Link download / Code:

    Cauta:
    Code:
    template <class _Func>
    void for_each_entity(_Func & func)
    {
        itertype(m_set_entity) it = m_set_entity.begin();
        for ( ; it != m_set_entity.end(); ++it) {
            LPENTITY entity = *it;
            // <Factor> Sanity check
            if (entity->GetSectree() != this) {
                sys_err("<Factor> SECTREE-ENTITY relationship mismatch");
                m_set_entity.erase(it);
                continue;
            }
    
            func(entity);
        }
    }

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

    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
    Comunitatea Metin2 Romania este si pe Discord! :ymcowboy:

    2500+ membri • Chat activ zilnic • Support • Cereri & Resurse

    ► discord.gg/jWxeDSf7HP ◄





    See full signature

    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: g34sslol, marcos_impacto, proximity_gg și 1 vizitator

    Discord ID copiat: