mirror of
https://github.com/AuxXxilium/eudev.git
synced 2024-12-28 06:35:34 +07:00
shared, libsystemd-daemon: check for empty strings in strto*l conversions
strtol() and friends may set EINVAL if no conversion was performed, but they are not required to do so. In practice they don't. We need to check for it. https://bugzilla.redhat.com/show_bug.cgi?id=870577
This commit is contained in:
parent
0eb59ccfe6
commit
f3910003bc
@ -88,7 +88,7 @@ _sd_export_ int sd_listen_fds(int unset_environment) {
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!p || *p || l <= 0) {
|
||||
if (!p || p == e || *p || l <= 0) {
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
}
|
||||
@ -112,7 +112,7 @@ _sd_export_ int sd_listen_fds(int unset_environment) {
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!p || *p) {
|
||||
if (!p || p == e || *p) {
|
||||
r = -EINVAL;
|
||||
goto finish;
|
||||
}
|
||||
|
@ -865,7 +865,7 @@ int config_parse_mode(
|
||||
|
||||
errno = 0;
|
||||
l = strtol(rvalue, &x, 8);
|
||||
if (!x || *x || errno) {
|
||||
if (!x || x == rvalue || *x || errno) {
|
||||
log_error("[%s:%u] Failed to parse mode value, ignoring: %s", filename, line, rvalue);
|
||||
return 0;
|
||||
}
|
||||
|
@ -377,7 +377,7 @@ int safe_atou(const char *s, unsigned *ret_u) {
|
||||
errno = 0;
|
||||
l = strtoul(s, &x, 0);
|
||||
|
||||
if (!x || *x || errno)
|
||||
if (!x || x == s || *x || errno)
|
||||
return errno ? -errno : -EINVAL;
|
||||
|
||||
if ((unsigned long) (unsigned) l != l)
|
||||
@ -397,7 +397,7 @@ int safe_atoi(const char *s, int *ret_i) {
|
||||
errno = 0;
|
||||
l = strtol(s, &x, 0);
|
||||
|
||||
if (!x || *x || errno)
|
||||
if (!x || x == s || *x || errno)
|
||||
return errno ? -errno : -EINVAL;
|
||||
|
||||
if ((long) (int) l != l)
|
||||
@ -417,7 +417,7 @@ int safe_atollu(const char *s, long long unsigned *ret_llu) {
|
||||
errno = 0;
|
||||
l = strtoull(s, &x, 0);
|
||||
|
||||
if (!x || *x || errno)
|
||||
if (!x || x == s || *x || errno)
|
||||
return errno ? -errno : -EINVAL;
|
||||
|
||||
*ret_llu = l;
|
||||
@ -434,7 +434,7 @@ int safe_atolli(const char *s, long long int *ret_lli) {
|
||||
errno = 0;
|
||||
l = strtoll(s, &x, 0);
|
||||
|
||||
if (!x || *x || errno)
|
||||
if (!x || x == s || *x || errno)
|
||||
return errno ? -errno : -EINVAL;
|
||||
|
||||
*ret_lli = l;
|
||||
|
Loading…
Reference in New Issue
Block a user