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 :))