Projektuję system w C/C++, który można rozszerzyć za pomocą wszelkiego rodzaju wtyczek. Istnieje dobrze zdefiniowany publiczny API C, który w większości działa z (const) char*
i innymi typami wskaźników. Wtyczki są kompilowane do plików .so lub .dll, a główna aplikacja ładuje je po uruchomieniu, a później rozładowuje lub przeładowuje je na żądanie.Uruchamianie wtyczek w piaskownicy
Wtyczki mogą pochodzić z różnych źródeł, wiarygodny, czy nie tak :)
Teraz chciałbym, aby upewnić się, że jeśli ktoś robi coś głupiego wtyczki (takie jak próbuje uwolnić pamięć który był nie powinno się go uwalniać), ta czynność nie powoduje zniszczenia całego systemu, a jedynie dostrzega główny system o niewłaściwie działającej wtyczce, aby usunąć go z kolejki.
Kod połączenia są wykonywane w następujący sposób:
const char* data = get_my_data();
for(int i = 0; i<plugins; i++)
{
plugins[i]->execute(data);
}
ale jeśli plugin[0]
FreeS „przez przypadek” ciąg danych lub zastąpienie go lub przez pomyłkę skacze zająć 0x0 przyniesie to w dół cały system , i nie chcę tego. Jak mogę uniknąć tego rodzaju katastrofy. (Wiem, że mogę zduplikować ciąg znaków data
... to nie rozwiąże mojego problemu :))
Czy moja odpowiedź pomogła Ci rozwiązać ten problem? Jeśli tak, zaakceptuj to jako poprawną odpowiedź. –