mirror of
https://github.com/systemd/systemd
synced 2024-10-06 16:21:34 +00:00
string-util: allow taking SIZE_MAX as size to shorten to
This is useful for two reasons: 1. it addresses a potential overflow in a graceful way 2. Gives callers the ability to just pass SIZE_MAX for a NOP Prompted by: #31341
This commit is contained in:
parent
10d50d9eac
commit
d49dc7bbe7
|
@ -620,6 +620,9 @@ char *cellescape(char *buf, size_t len, const char *s) {
|
||||||
char* strshorten(char *s, size_t l) {
|
char* strshorten(char *s, size_t l) {
|
||||||
assert(s);
|
assert(s);
|
||||||
|
|
||||||
|
if (l >= SIZE_MAX-1) /* Would not change anything */
|
||||||
|
return s;
|
||||||
|
|
||||||
if (strnlen(s, l+1) > l)
|
if (strnlen(s, l+1) > l)
|
||||||
s[l] = 0;
|
s[l] = 0;
|
||||||
|
|
||||||
|
|
|
@ -299,8 +299,13 @@ TEST(ascii_strlower) {
|
||||||
TEST(strshorten) {
|
TEST(strshorten) {
|
||||||
char s[] = "foobar";
|
char s[] = "foobar";
|
||||||
|
|
||||||
|
assert_se(strlen(strshorten(s, SIZE_MAX)) == 6);
|
||||||
|
assert_se(strlen(strshorten(s, SIZE_MAX-1)) == 6);
|
||||||
|
assert_se(strlen(strshorten(s, SIZE_MAX-2)) == 6);
|
||||||
assert_se(strlen(strshorten(s, 6)) == 6);
|
assert_se(strlen(strshorten(s, 6)) == 6);
|
||||||
|
assert_se(strlen(strshorten(s, 7)) == 6);
|
||||||
assert_se(strlen(strshorten(s, 12)) == 6);
|
assert_se(strlen(strshorten(s, 12)) == 6);
|
||||||
|
assert_se(strlen(strshorten(s, 5)) == 5);
|
||||||
assert_se(strlen(strshorten(s, 2)) == 2);
|
assert_se(strlen(strshorten(s, 2)) == 2);
|
||||||
assert_se(strlen(strshorten(s, 0)) == 0);
|
assert_se(strlen(strshorten(s, 0)) == 0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue