• [^] # Re: C'était déjà dans les journaux linuxfr le 27/9

    Posté par (site web personnel) . En réponse à la dépêche Faille de sécurité exploitable à distance dans mplayer. Évalué à 9.

    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 );