src/main.c: Sanity check the arguments to ros_query.
authorFlorian Forster <octo@leeloo.lan.home.verplant.org>
Tue, 22 Dec 2009 15:58:29 +0000 (16:58 +0100)
committerFlorian Forster <octo@leeloo.lan.home.verplant.org>
Tue, 22 Dec 2009 15:58:29 +0000 (16:58 +0100)
Thanks to Andrey Ponomarenko for pointing out the problem.

src/main.c

index d35c30c..010572d 100644 (file)
@@ -348,6 +348,12 @@ static int send_command (ros_connection_t *c, /* {{{ */
        size_t i;
        int status;
 
+       assert (c != NULL);
+       assert (command != NULL);
+
+       if ((args == NULL) && (args_num > 0))
+               return (EINVAL);
+
        /* FIXME: For debugging only */
        memset (buffer, 0, sizeof (buffer));
 
@@ -412,6 +418,8 @@ static int read_word (ros_connection_t *c, /* {{{ */
        if ((buffer == NULL) || (*buffer_size < 1))
                return (EINVAL);
 
+       assert (c != NULL);
+
        /* read one byte from the socket */
        status = read_exact (c->fd, word_length, 1);
        if (status != 0)
@@ -558,6 +566,9 @@ static ros_reply_t *receive_reply (ros_connection_t *c) /* {{{ */
        ros_reply_t *head;
        ros_reply_t *tail;
 
+       if (c == NULL)
+               return (NULL);
+
        head = NULL;
        tail = NULL;
 
@@ -845,6 +856,9 @@ int ros_query (ros_connection_t *c, /* {{{ */
        int status;
        ros_reply_t *r;
 
+       if ((c == NULL) || (command == NULL) || (handler == NULL))
+               return (EINVAL);
+
        status = send_command (c, command, args_num, args);
        if (status != 0)
                return (status);