summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2015-01-28 14:58:22 -0600
committerGregory Nutt <gnutt@nuttx.org>2015-01-28 14:58:22 -0600
commit41ebf460bbc7a785cecf431f1102f9bd6de37a9e (patch)
tree1ce615ddad9c069381bf97f0b5664024fdbc1ef3
parent3321323bd9631a91e187c5d553d3d2dad419b05c (diff)
downloadnuttx-41ebf460bbc7a785cecf431f1102f9bd6de37a9e.tar.gz
nuttx-41ebf460bbc7a785cecf431f1102f9bd6de37a9e.tar.bz2
nuttx-41ebf460bbc7a785cecf431f1102f9bd6de37a9e.zip
apps/examples/udgram: Improve some size tests and improve error reporting
-rw-r--r--apps/examples/udgram/udgram_server.c19
1 files 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)