Fragen? Antworten! Siehe auch: Alternativlos
Es gibt zwei Arten von Parse-Routine, einmal "hier ist die Datei, mach mal" und einmal "hier ist ein char* und ein size_t, mach mal". Die Version mit der Datei ruft intern die andere Version auf.
Nun wollte ich, dass das User-Interface zwischen den SSL-Versionen in gatling nicht unnötig verschieden ist, daher nimmt mein PolarSSL-Code ein OpenSSL-Style server.pem (key und cert hintereinander gepasted in einer Textdatei), mappt das read-only in den Speicher und übergibt dann die jeweiligen Speicherregionen an die Parse-Funktion mit Zeiger und Länge.
Und die failed jetzt plötzlich. Stellt sich raus, dass der Code jetzt prüft, ob das letzte Zeichen im reingereichten Buffer ein 0-Byte ist.
Also mal abgesehen davon, dass dieser Check nicht dokumentiert ist, ist er auch völlig hirnrissig, denn dafür übergibt man ja gerade eine Länge, damit man da kein In-Band-Signalling für den Terminator braucht. Aber in meinem Fall mit dem read-only mmap kann ich auch gar kein Null-Byte da hin tun. Ich müsste also die Daten hin- und her kopieren.
Klarer Fall von "gut gemeint", würde ich sagen. Ich habe mal einen Bug gefiled. Da das mit dem 0-Byte auch nicht dokumentiert ist, kann man es ja auch gefahrlos wieder rauskanten. Ich hoffe, das tun die dann zeitnah.