Keine Datenlecks mehr: TrapC soll die Speicherprobleme von C und C++ beheben
Mit einer automatischen Speicherverwaltung und speichersicheren Zeigern soll der Open-Source-Compiler TrapC in C und C++ geschriebenen Code sicherer machen.

(Bild: mki / heise online)
- Manuel Masiero
TrapC ist eine neue, auf Cybersicherheit spezialisierte Variante der Programmiersprache C. Sie zielt darauf ab, die in C und C++ gängigen Speicherprobleme und Pufferüberläufe zu verhindern.
VerfĂĽgbar als quelloffene Software Ende 2025
Der von Robin Rowe entwickelte TrapC-Compiler soll Ende des Jahres 2025 als Open-Source-Software verfügbar sein und ermöglicht es, C und TrapC-Code parallel zu verwenden. Zudem soll TrapC auch zu einfachem C++-Code kompatibel sein, zum Beispiel:
// hello.cpp
#include <iostream>
int main()
{ std::cout << "hello world" << std::endl;
return 0;
}
Rowe hat sein Projekt auf dem letzten ISO-C-Meeting Ende Februar in Graz vorgestellt. Der TrapC-Compiler setzt auf speichersichere Zeiger, was Speicherlecks und Speicherüberläufe verhindern soll. Parallel dazu greifen Sicherheitsfunktionen, die in C fehlen, wie Konstruktoren und Destruktoren aus C++. TrapC entfernt zudem unsichere Schlüsselwörter wie goto
und union
und fügt neue Schlüsselwörter wie trap
und alias
hinzu. In einem Whitepaper nennt Robin Rowe ein Beispiel dafĂĽr, wie TrapC einem PufferĂĽberlauf entgegenwirkt: ein User-Dialog, in dem Anwender ihre Namen eingeben. In C geschrieben, sieht die entsprechende Code-Passage so aus:
// gets_input.h (CWE–242, CWE–120, CWE-77)
#include <stdio.h>
inline
void gets_input()
{ char buffer[24];
printf("Please enter your name and press <Enter>\n");
gets(buffer);// TrapC will terminate on overrun!
printf("%s",buffer);
}
Geben Anwenderinnen und Anwender mehr als 24 Zeichen ein, provoziert das einen Pufferüberlauf und öffnet einen Exploit für Angreifende. In C oder C++ wird dieser Fehler nicht unbedingt registriert, was zu einem Crash führt.
Dagegen kommt es mit TrapC nicht zu einem Absturz. Im Fall eines SpeicherĂĽberlaufs oder anderen Fehlern wie etwa einer Teilung durch Null beendet der TrapC-Compiler das Programm und wirft eine entsprechende Fehlermeldung aus, es sei denn, es existiert eine passende Fehlerroutine.
(Bild: Robin Rowe)
Fehler in die Falle fĂĽhren
Mit dem Stichwort trap
fĂĽhrt TrapC ein eigenes Error-Handling ein. Ein Beispiel:
// trap_test.tc
#include "gets_input.h"
int main()
{ gets_input();
trap
{ puts("ERROR: invalid input");
return 1;
}
return 0;
}
Dabei muss die aufrufende Funktion die Fehler behandeln, denn sie lassen sich nicht wie bei C++-Exceptions weiterreichen. trap.return
bietet jedoch eine ähnliche Funktion wie throw
. Weitere Details der Sprache finden sich im Whitepaper.
TrapC-Entwickler Robin Rowe hat auf Reddit noch einmal die Unterschiede zwischen trap
und try/catch
ausführlicher erklärt.
(who)