scanner, client: Added more error checks when strtol function is used
authorImran Zaman <imran.zaman@gmail.com>
Wed, 5 Nov 2014 15:40:18 +0000 (17:40 +0200)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Mon, 10 Nov 2014 13:25:13 +0000 (15:25 +0200)
Signed-off-by: Imran Zaman <imran.zaman@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
src/scanner.c
src/wayland-client.c

index 5e5152b..fa8e0c0 100644 (file)
@@ -405,11 +405,13 @@ start_element(void *data, const char *element_name, const char **atts)
                        message->destructor = 0;
 
                if (since != NULL) {
+                       int prev_errno = errno;
                        errno = 0;
                        version = strtol(since, &end, 0);
-                       if (errno == EINVAL || end == since || *end != '\0')
+                       if (errno != 0 || end == since || *end != '\0')
                                fail(&ctx->loc,
                                     "invalid integer (%s)\n", since);
+                       errno = prev_errno;
                } else {
                        version = 1;
                }
index b0f77b9..01629e0 100644 (file)
@@ -829,9 +829,12 @@ wl_display_connect(const char *name)
 
        connection = getenv("WAYLAND_SOCKET");
        if (connection) {
+               int prev_errno = errno;
+               errno = 0;
                fd = strtol(connection, &end, 0);
-               if (*end != '\0')
+               if (errno != 0 || connection == end || *end != '\0')
                        return NULL;
+               errno = prev_errno;
 
                flags = fcntl(fd, F_GETFD);
                if (flags != -1)