diff --git a/src/rsrv/camessage.c b/src/rsrv/camessage.c index 74dc96030..af1bfe168 100644 --- a/src/rsrv/camessage.c +++ b/src/rsrv/camessage.c @@ -2101,8 +2101,13 @@ int camessage (struct client *client, struct message_buffer *recv) tmp_postsize = ntohs (mp->m_postsize); msgsize = tmp_postsize + sizeof(*mp); - if (msgsize > bytes_left) + if (msgsize > bytes_left) { + if ( msgsize > recv->cnt ) { + log_header ( "rsrv: CA message received was too large", client, mp, nmsg ); + return RSRV_ERROR; + } return RSRV_OK; + } /* Have complete message (header + content) * -> convert the header elements diff --git a/src/rsrv/camsgtask.c b/src/rsrv/camsgtask.c index 8e2c25395..9bec1084e 100644 --- a/src/rsrv/camsgtask.c +++ b/src/rsrv/camsgtask.c @@ -64,7 +64,8 @@ void camsgtask (struct client *client) (int)(sizeof(client->recv.buf)-client->recv.cnt), 0); if (nchars==0){ if (CASDEBUG>0) { - errlogPrintf ("CAS: nill message disconnect\n"); + errlogPrintf ( "CAS: nill message disconnect ( %u bytes request )\n", + sizeof (client->recv.buf) - client->recv.cnt ); } break; } diff --git a/src/rsrv/caservertask.c b/src/rsrv/caservertask.c index a6c520f84..94a70ebc1 100644 --- a/src/rsrv/caservertask.c +++ b/src/rsrv/caservertask.c @@ -120,14 +120,14 @@ struct client *create_base_client () client->proto = IPPROTO_UDP; client->minor_version_number = CA_UKN_MINOR_VERSION; - client->send.maxstk = MAX_UDP; + client->send.maxstk = MAX_UDP_SEND; client->lock = semMutexMustCreate(); client->putNotifyLock = semMutexMustCreate(); client->addrqLock = semMutexMustCreate(); client->eventqLock = semMutexMustCreate(); - client->recv.maxstk = ETHERNET_MAX_UDP; + client->recv.maxstk = MAX_UDP_RECV; return client; }