From 41ebf460bbc7a785cecf431f1102f9bd6de37a9e Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Wed, 28 Jan 2015 14:58:22 -0600 Subject: apps/examples/udgram: Improve some size tests and improve error reporting --- apps/examples/udgram/udgram_server.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/apps/examples/udgram/udgram_server.c b/apps/examples/udgram/udgram_server.c index 756f2113f..8b21b7c43 100644 --- a/apps/examples/udgram/udgram_server.c +++ b/apps/examples/udgram/udgram_server.c @@ -145,7 +145,7 @@ int server_main(int argc, char *argv[]) nbytes = recvfrom(sockfd, inbuf, 1024, 0, (struct sockaddr*)&client, &recvlen); - if (recvlen < sizeof(sa_family_t)) + if (recvlen < sizeof(sa_family_t) || recvlen > sizeof(struct sockaddr_un)) { printf("server: %d. ERROR Received %d bytes from client with invalid length %d\n", offset, nbytes, recvlen); @@ -159,11 +159,24 @@ int server_main(int argc, char *argv[]) { printf("server: %d. Received %d bytes from an abstract client\n", offset, nbytes); + + if (client.sun_path[0] != '\0') + { + printf("server: ERROR path not NUL terminated\n"); + } } - else /* if (recvlen > sizeof(sa_family_t) */ + else /* if (recvlen > sizeof(sa_family_t)+1 && + recvlen <= sizeof(struct sockaddr_un)) */ { - printf("server: %d. Received %d bytes from a client %s\n", + int pathlen = recvlen - sizeof(sa_family_t) - 1; + + printf("server: %d. Received %d bytes from a pathname client %s\n", offset, nbytes, client.sun_path); + + if (client.sun_path[pathlen] != '\0') + { + printf("server: ERROR path not NUL terminated\n"); + } } if (nbytes < 0) -- cgit v1.2.3