Mit Schadcode und Überschreiben von anderen Bereichen hat es erstmal nichts zu tun. Man muss ja nichts absichtlich falsch machen.
Du kannst dir ja dazu die nicht ganz im Standard enthaltene Funktion getline() anschauen. Dort kann auch eine beliebige Länge eingelesen werden und gerade deswegen stellt sie keine Gefahr dar.
Das mit der Schleife wäre eine Option, nur habe ich dazu keinen Code gefunden, der das verdeutlicht. Kannst du einen Beispiel geben?
Aber fällt dabei nicht für jede Nachricht ein extra Header an?
Es geht mir dabei darum, dass eine andere Anwendung nicht auf den Limit achten muss, da sie wahrscheinlich in einer Sprache geschrieben sein wird, in der es sowas nicht gibt.
Diese wird standardmäßig einfach nur ein Packet mit dem ganzen Inhalt unter einem Header senden.
:edit:
Würde das hier funktionieren?
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
char *buffer = NULL;
char tmp[128] = "";
int buffersize = 128;
int n = 0;
buffer = malloc(buffersize * sizeof(char));
buffer[0] = 0;
while ((n = recv(s, tmp, 128, 0)) > 0) {
tmp[n] = 0;
if ((strlen(tmp) + strlen(buffer)) >= buffersize) {
buffersize = buffersize * 2;
buffer = realloc(buffer, buffersize * sizeof(char));
}
strcat(buffer, tmp);
if (buffer[strlen(buffer) - 1] == '\n') {
ParseData(buffer);
buffersize = 128;
free(buffer);
buffer = malloc(buffersize * sizeof(char));
buffer[0] = 0;
}
}
|
Und nachdem du dich auszukennen scheinst, kannst du vielleicht nach eventuellen Sicherheitslecks schauen? :>