Comme d'autres l'ont expliqué il s'agit d'un débordement de buffer. Deux méthodes pour éviter ça:
1) vérifier la longueur
char str[250];
snprintf(str, 249, "Host %s:%d", server_url->hostname, server_url->port ); //max 249 caractères
str[249]='0円'; //au cas où - snprintf ne finit pas forcément par le caractère NUL si la chaîne entrée est trop longue
...
snprintf( str, 249, "Host: %s:%d", url->hostname, url->port );
str[249]='0円';
2) allocation dynamique
char *str = NULL; //on alloue ce qu'il faut pour y mettre hostname+"Host :"+15 cars. (on compte large, pour l'entier)
str = (char *)malloc( strlen(server_url->hostname) + strlen("Host :") + 15);
sprintf( str, "Host: %s:%d", server_url->hostname, server_url->port );
...
str = (char *)realloc(str, strlen(url->hostname) + strlen("Host :") + 15);
sprintf( str, "Host: %s:%d", url->hostname, url->port );
[^] # Re: C'était déjà dans les journaux linuxfr le 27/9
Posté par Colin Leroy (site web personnel) . En réponse à la dépêche Faille de sécurité exploitable à distance dans mplayer. Évalué à 9.
1) vérifier la longueur
char str[250];
snprintf(str, 249, "Host %s:%d", server_url->hostname, server_url->port ); //max 249 caractères
str[249]='0円'; //au cas où - snprintf ne finit pas forcément par le caractère NUL si la chaîne entrée est trop longue
...
snprintf( str, 249, "Host: %s:%d", url->hostname, url->port );
str[249]='0円';
2) allocation dynamique
char *str = NULL;
//on alloue ce qu'il faut pour y mettre hostname+"Host :"+15 cars. (on compte large, pour l'entier)
str = (char *)malloc( strlen(server_url->hostname) + strlen("Host :") + 15);
sprintf( str, "Host: %s:%d", server_url->hostname, server_url->port );
...
str = (char *)realloc(str, strlen(url->hostname) + strlen("Host :") + 15);
sprintf( str, "Host: %s:%d", url->hostname, url->port );