Uruchamianie wtyczek w piaskownicy

Projektuję system w C / C ++, który jest rozszerzalny za pomocą wszelkiego rodzaju wtyczek. Istnieje dobrze zdefiniowany publiczny interfejs API C, który głównie działa(const) char* i inne typy wskaźników. Wtyczki są kompilowane do plików .so lub .dll, a główna aplikacja ładuje je przy starcie, a później usuwa je lub ładuje na żądanie.

Wtyczki mogą pochodzić z różnych źródeł, godnych zaufania lub nie tak :)

Teraz chciałbym się upewnić, że jeśli jedna wtyczka robi coś głupiego (na przykład próbuje uwolnić pamięć, której nie powinien uwolnić), ta akcja nie powoduje zniszczenia całego systemu, a jedynie zauważa główny system o niepoprawna wtyczka do niego, aby usunąć ją z kolejki.

Połączenia z kodem 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śliplugin[0]uwalnia „przypadkowo” ciąg danych lub nadpisuje go lub przez pomyłkę przeskakuje na adres 0x0, co sprowadziłoby na cały system, a tego nie chcę. Jak mogę uniknąć tego rodzaju katastrofy. (Wiem, mogę duplikowaćdata string ... to nie rozwiązuje mojego problemu :))

questionAnswers(3)

yourAnswerToTheQuestion