diff --git a/compositor/main.c b/compositor/main.c index 6746e3a2..5fb5d5a8 100644 --- a/compositor/main.c +++ b/compositor/main.c @@ -1699,8 +1699,9 @@ 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 (*end != '\0') + if (errno != 0 || end == server_socket || *end != '\0') fd = -1; } else { fd = -1; diff --git a/compositor/systemd-notify.c b/compositor/systemd-notify.c index 9fbd5ee2..6104124f 100644 --- a/compositor/systemd-notify.c +++ b/compositor/systemd-notify.c @@ -146,7 +146,7 @@ module_init(struct weston_compositor *compositor, errno = 0; watchdog_time_conv = strtol(watchdog_time_env, &tail, 10); - if ((errno != 0) || (*tail != '\0')) + if (errno != 0 || tail == watchdog_time_env || *tail != '\0') return 0; /* Convert 'WATCHDOG_USEC' to milliseconds and notify diff --git a/libweston/compositor.c b/libweston/compositor.c index b045381d..e9c2a837 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -4628,8 +4628,9 @@ weston_environment_get_fd(const char *env) e = getenv(env); if (!e) return -1; + errno = 0; fd = strtol(e, &end, 10); - if (*end != '\0') + if (errno != 0 || end == e || *end != '\0') return -1; flags = fcntl(fd, F_GETFD); diff --git a/libweston/libbacklight.c b/libweston/libbacklight.c index 4039575c..59f4e440 100644 --- a/libweston/libbacklight.c +++ b/libweston/libbacklight.c @@ -48,6 +48,7 @@ static long backlight_get(struct backlight *backlight, char *node) { char buffer[100]; char *path; + char *end; int fd; long value, ret; @@ -65,8 +66,15 @@ static long backlight_get(struct backlight *backlight, char *node) goto out; } - value = strtol(buffer, NULL, 10); + errno = 0; + value = strtol(buffer, &end, 10); + if (errno != 0 || end == buffer || *end != '\0') { + ret = -1; + goto out; + } + ret = value; + out: if (fd >= 0) close(fd);