From: Lennart Poettering Date: Tue, 19 Nov 2024 19:42:27 +0000 (+0100) Subject: terminal-util: modernize vtnr_from_tty() a bit X-Git-Tag: v258-rc1~1725 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=57e55f93bbb41bfd9f6cc8597c75bd62ba9fcd62;p=thirdparty%2Fsystemd.git terminal-util: modernize vtnr_from_tty() a bit --- diff --git a/src/basic/terminal-util.c b/src/basic/terminal-util.c index 3831543a6ab..725ccc2b871 100644 --- a/src/basic/terminal-util.c +++ b/src/basic/terminal-util.c @@ -777,26 +777,24 @@ bool tty_is_console(const char *tty) { } int vtnr_from_tty(const char *tty) { - int i, r; + int r; assert(tty); tty = skip_dev_prefix(tty); - if (!startswith(tty, "tty") ) - return -EINVAL; - - if (!ascii_isdigit(tty[3])) + const char *e = startswith(tty, "tty"); + if (!e) return -EINVAL; - r = safe_atoi(tty+3, &i); + unsigned u; + r = safe_atou(e, &u); if (r < 0) return r; + if (!vtnr_is_valid(u)) + return -ERANGE; - if (i < 0 || i > 63) - return -EINVAL; - - return i; + return (int) u; } int resolve_dev_console(char **ret) { diff --git a/src/basic/terminal-util.h b/src/basic/terminal-util.h index 833c6617de7..75b32190976 100644 --- a/src/basic/terminal-util.h +++ b/src/basic/terminal-util.h @@ -172,3 +172,7 @@ static inline bool osc_char_is_valid(char c) { * ECMA-48 5th edition, section 8.3.89 */ return (unsigned char) c >= 32U && (unsigned char) c < 127; } + +static inline bool vtnr_is_valid(unsigned n) { + return n >= 1 && n <= 63; +} diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index dce596eeb37..4b14b9b690a 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -952,7 +952,7 @@ static int create_session( if (seat) { if (seat_has_vts(seat)) { - if (vtnr <= 0 || vtnr > 63) + if (!vtnr_is_valid(vtnr)) return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "VT number out of range"); } else {