boost::asio::buffer: Immer die Größe des Puffers und Verhinderung von buffer-overflow?

Habe ich die beiden folgenden Funktionen zum senden und empfangen von Paketen.

void send(std::string protocol)
{
    char *request=new char[protocol.size()+1];
    request[protocol.size()] = 0;
    memcpy(request,protocol.c_str(),protocol.size());

    request_length = std::strlen(request);
    boost::asio::write(s, boost::asio::buffer(request, request_length));
}
void receive()
{
    char reply[max_length];
    size_t reply_length = boost::asio::read(s, boost::asio::buffer(reply, request_length));
    std::cout << "Reply is: ";
    std::cout.write(reply, reply_length);
    std::cout << "\n";
}

Die Fragen beziehen sich auf diesen Teil boost::asio::buffer(reply, request_length) wo die Anfrage Länge ist die Länge einer Zeichenkette, die war zunächst im setup, wenn das Paket versendet wurde. Wie überprüfe ich die Größe des Puffers, ohne zu wissen request_length? Eine andere Frage ist, wie kann ich verhindern, Pufferüberlauf?

InformationsquelleAutor pandoragami | 2013-02-25

Schreibe einen Kommentar