--- libaitrpc/src/srv.c 2015/07/22 12:49:10 1.27.2.5 +++ libaitrpc/src/srv.c 2016/06/23 15:59:52 1.28.2.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: srv.c,v 1.27.2.5 2015/07/22 12:49:10 misho Exp $ +* $Id: srv.c,v 1.28.2.1 2016/06/23 15:59:52 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -312,8 +312,7 @@ rxPacket(sched_task_t *task) u_short crc; #endif u_char *buf = AIT_GET_BUF(&c->cli_buf); - u_char b[sizeof(struct tagRPCCall)]; - struct tagRPCCall *rpc = (struct tagRPCCall*) buf; + struct tagRPCCall b, *rpc = (struct tagRPCCall*) buf; #ifdef TCP_SESSION_TIMEOUT struct timespec ts = { DEF_RPC_TIMEOUT, 0 }; @@ -323,9 +322,9 @@ rxPacket(sched_task_t *task) #endif /* prepare rx */ - len = recv(TASK_FD(task), b, sizeof b, MSG_PEEK); + len = recv(TASK_FD(task), &b, sizeof b, MSG_PEEK); if (len == sizeof b) - rlen = ntohl(((struct tagRPCCall*) b)->call_len); + rlen = ntohl(b.call_len); rlen = recv(TASK_FD(task), buf, rlen, 0); if (rlen == -1) { @@ -524,7 +523,7 @@ rxUDPPacket(sched_task_t *task) /* receive connect packet */ AIT_SET_BUF(&b, NULL, srv->srv_netbuf); - salen = sa.ss.ss_len = (u_char) sizeof(sockaddr_t); + salen = sa.ss.ss_len = (u_char) MIN(sizeof(sockaddr_t), 0xff); rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b), 0, &sa.sa, &salen); rpc = (struct tagRPCCall*) AIT_GET_BUF(&b); if (rlen < sizeof(struct tagRPCCall)) @@ -664,7 +663,7 @@ rxRAWPacket(sched_task_t *task) /* receive connect packet */ AIT_SET_BUF(&b, NULL, srv->srv_netbuf); - salen = sa.ss.ss_len = (u_char) sizeof(sockaddr_t); + salen = sa.ss.ss_len = (u_char) MIN(sizeof(sockaddr_t), 0xff); rlen = recvfrom(TASK_FD(task), AIT_GET_BUF(&b), AIT_LEN(&b), 0, &sa.sa, &salen); if (sa.sa.sa_family == AF_INET) { struct ip *h;