Switch to use safe_strtoint instead of strtol
authorBryce Harrington <bryce@osg.samsung.com>
Thu, 4 Aug 2016 00:40:52 +0000 (17:40 -0700)
committerBryce Harrington <bryce@osg.samsung.com>
Sun, 7 Aug 2016 01:19:22 +0000 (18:19 -0700)
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
compositor/main.c
compositor/systemd-notify.c
libweston/compositor.c
libweston/libbacklight.c
shared/config-parser.c
shared/option-parser.c
xwayland/launcher.c

index 5fb5d5a..0e5af5b 100644 (file)
@@ -52,6 +52,7 @@
 #include "compositor.h"
 #include "../shared/os-compatibility.h"
 #include "../shared/helpers.h"
+#include "../shared/string-helpers.h"
 #include "git-version.h"
 #include "version.h"
 #include "weston.h"
@@ -1580,7 +1581,7 @@ int main(int argc, char *argv[])
        char *modules = NULL;
        char *option_modules = NULL;
        char *log = NULL;
-       char *server_socket = NULL, *end;
+       char *server_socket = NULL;
        int32_t idle_time = -1;
        int32_t help = 0;
        char *socket_name = NULL;
@@ -1699,9 +1700,7 @@ int main(int argc, char *argv[])
        server_socket = getenv("WAYLAND_SERVER_SOCKET");
        if (server_socket) {
                weston_log("Running with single client\n");
-               errno = 0;
-               fd = strtol(server_socket, &end, 10);
-               if (errno != 0 || end == server_socket || *end != '\0')
+               if (!safe_strtoint(server_socket, &fd))
                        fd = -1;
        } else {
                fd = -1;
index 6104124..49e51f4 100644 (file)
 
 #include "config.h"
 
-#include <errno.h>
 #include <stdlib.h>
 #include <systemd/sd-daemon.h>
 #include <sys/socket.h>
 #include <wayland-server.h>
+
 #include "shared/helpers.h"
+#include "shared/string-helpers.h"
 #include "shared/zalloc.h"
 #include "compositor.h"
 
@@ -116,7 +117,6 @@ WL_EXPORT int
 module_init(struct weston_compositor *compositor,
            int *argc, char *argv[])
 {
-       char *tail;
        char *watchdog_time_env;
        struct wl_event_loop *loop;
        long watchdog_time_conv;
@@ -140,13 +140,10 @@ module_init(struct weston_compositor *compositor,
         * by systemd to transfer 'WatchdogSec' watchdog timeout
         * setting from service file.*/
        watchdog_time_env = getenv("WATCHDOG_USEC");
-
        if (!watchdog_time_env)
                return 0;
 
-       errno = 0;
-       watchdog_time_conv = strtol(watchdog_time_env, &tail, 10);
-       if (errno != 0 || tail == watchdog_time_env || *tail != '\0')
+       if (!safe_strtoint(watchdog_time_env, &watchdog_time_conv))
                return 0;
 
        /* Convert 'WATCHDOG_USEC' to milliseconds and notify
index e9c2a83..b17c76d 100644 (file)
@@ -58,6 +58,7 @@
 #include "presentation-time-server-protocol.h"
 #include "shared/helpers.h"
 #include "shared/os-compatibility.h"
+#include "shared/string-helpers.h"
 #include "shared/timespec-util.h"
 #include "git-version.h"
 #include "version.h"
@@ -4622,15 +4623,11 @@ compositor_bind(struct wl_client *client,
 WL_EXPORT int
 weston_environment_get_fd(const char *env)
 {
-       char *e, *end;
+       char *e;
        int fd, flags;
 
        e = getenv(env);
-       if (!e)
-               return -1;
-       errno = 0;
-       fd = strtol(e, &end, 10);
-       if (errno != 0 || end == e || *end != '\0')
+       if (!e || !safe_strtoint(e, &fd))
                return -1;
 
        flags = fcntl(fd, F_GETFD);
index 59f4e44..4bbc6db 100644 (file)
 #include <string.h>
 #include <errno.h>
 
+#include "shared/string-helpers.h"
+
 static long backlight_get(struct backlight *backlight, char *node)
 {
        char buffer[100];
        char *path;
-       char *end;
-       int fd;
-       long value, ret;
+       int fd, value;
+       long ret;
 
        if (asprintf(&path, "%s/%s", backlight->path, node) < 0)
                return -ENOMEM;
@@ -66,9 +67,7 @@ static long backlight_get(struct backlight *backlight, char *node)
                goto out;
        }
 
-       errno = 0;
-       value = strtol(buffer, &end, 10);
-       if (errno != 0 || end == buffer || *end != '\0') {
+       if (!safe_strtoint(buffer, &value)) {
                ret = -1;
                goto out;
        }
index 1edfd60..d773cc9 100644 (file)
@@ -41,6 +41,7 @@
 #include <wayland-util.h>
 #include "config-parser.h"
 #include "helpers.h"
+#include "string-helpers.h"
 
 struct weston_config_entry {
        char *key;
@@ -161,7 +162,6 @@ weston_config_section_get_int(struct weston_config_section *section,
                              int32_t *value, int32_t default_value)
 {
        struct weston_config_entry *entry;
-       char *end;
 
        entry = config_section_get_entry(section, key);
        if (entry == NULL) {
@@ -170,11 +170,8 @@ weston_config_section_get_int(struct weston_config_section *section,
                return -1;
        }
 
-       errno = 0;
-       *value = strtol(entry->value, &end, 10);
-       if (errno != 0 || end == entry->value || *end != '\0') {
+       if (!safe_strtoint(entry->value, value)) {
                *value = default_value;
-               errno = EINVAL;
                return -1;
        }
 
index fb4a342..eee7546 100644 (file)
@@ -33,6 +33,7 @@
 #include <errno.h>
 
 #include "config-parser.h"
+#include "string-helpers.h"
 
 static int
 handle_option(const struct weston_option *option, char *value)
@@ -41,9 +42,7 @@ handle_option(const struct weston_option *option, char *value)
 
        switch (option->type) {
        case WESTON_OPTION_INTEGER:
-               errno = 0;
-               * (int32_t *) option->data = strtol(value, &p, 10);
-               if (errno != 0 || p == value || *p != '\0')
+               if (!safe_strtoint(value, option->data))
                        return 0;
                return 1;
        case WESTON_OPTION_UNSIGNED_INTEGER:
index a83784c..8972319 100644 (file)
@@ -39,6 +39,7 @@
 #include "xwayland.h"
 #include "xwayland-api.h"
 #include "shared/helpers.h"
+#include "shared/string-helpers.h"
 #include "compositor/weston.h"
 
 static int
@@ -147,7 +148,7 @@ bind_to_unix_socket(int display)
 static int
 create_lockfile(int display, char *lockfile, size_t lsize)
 {
-       char pid[16], *end;
+       char pid[16];
        int fd, size;
        pid_t other;
 
@@ -165,9 +166,7 @@ create_lockfile(int display, char *lockfile, size_t lsize)
                        return -1;
                }
 
-               errno = 0;
-               other = strtol(pid, &end, 10);
-               if (errno != 0 || end == pid || *end != '\0') {
+               if (!safe_strtoint(pid, &other)) {
                        weston_log("can't parse lock file %s\n",
                                lockfile);
                        close(fd);