Dieses wunderschöne Stück Code-Sondermüll aus Firefox
... möchte ich Euch auch nicht vorenthalten:
JSString *jsstr = JS_ValueToString(cx, argv[0]);
NS_ENSURE_TRUE(jsstr, NS_ERROR_OUT_OF_MEMORY);
nsDependentString str(reinterpret_cast<const PRUnichar *>
(::JS_GetStringChars(jsstr)),
::JS_GetStringLength(jsstr));
return WriteCommon(str, aNewlineTerminate);
(nsHTMLDocument.cpp:2221)
Für den ungeübten Firefox-Code-Leser: da wird ein String-Objekt erstellt. Falls dadurch out of memory passiert, wird dem Pointer statt einer Null NS_ERROR_OUT_OF_MEMORY zugewiesen. Danach wird versucht, aus diesem "String" die Zeichen zu extrahieren. Der Ergebnisstring wird mit reinterpret_cast als Pointer auf Zeichen gesehen, und davon wird dann wieder ein String erstellt.
Der wird dann benutzt, um in den Document-Tree zu schreiben. Der String, der aus Gewurschtel aus einem out of memory Integer vielleicht entstanden ist.
Firefox hat keinen Exploit, der Code ist ein einziger Exploit. Oh my noodles!