Wie Boundary Checking machen bei vsnprintf?
-
Hallo
Ich möchte variable argumente, meine Frage ist, wenn ich den Inhalt via vsnprintf in einen anderen buffer kopieren möchte, wie überprüfe ich die länge?
Hier ein beispiel:
int funktion(char *buf, ...) { va_list argps; va_start(argps, buf); int length = strlen(buf); char *tmpbuf = malloc(length+1); vsnprintf(tmpbuf, length, buf, argps); return_code = unterfunktion(tmpbuf, length); va_end(argps); free(tmpbuf); return return_code; }
Mach ich das komplett falsch?
merci für eure antworten
Danke
-
Keine Idee?
-
man: vsnprintf() liefert als Rückgabewert die Anzahl der geschriebenen Bytes/Zeichen zurück - wenn der Wert gleich der übergebenen Länge ist, gab's einen Überlauf. Aber die kann um einiges länger sein als der Formatstring (int's benötigen je nach Größe 1 bis 10 Byte im Text, Strings potentiell unbegrenzt Platz - die nötigen Formatkennungen benötigen nur 2 Byte im Formatstring).
-
Das heisst es gibt nicht eine sinnvolle Variante um sicherzustellen, dass es keine Speicherverletzung gibt?