Fix format-truncation compile failure by typecasting USB IDs (#8250)
This patch adds safe_atoux16 for parsing an unsigned hexadecimal 16bit int, and uses that for parsing USB device and vendor IDs. This fixes a compile error with gcc-8 because while we know that USB IDs are 2 bytes, the compiler does not know that. ../src/udev/udev-builtin-hwdb.c:80:38: error: '%04X' directive output may be truncated writing between 4 and 8 bytes into a region of size between 2 and 6 [-Werror=format-truncation=] Signed-off-by: Adam Williamson <awilliam@redhat.com> Signed-off-by: Patrick Uiterwijk <puiterwijk@redhat.com>
This commit is contained in:
committed by
Zbigniew Jędrzejewski-Szmek
parent
6afe9046d5
commit
5547c12503
@@ -468,6 +468,44 @@ static void test_safe_atoi16(void) {
|
||||
assert_se(r == -EINVAL);
|
||||
}
|
||||
|
||||
static void test_safe_atoux16(void) {
|
||||
int r;
|
||||
uint16_t l;
|
||||
|
||||
r = safe_atoux16("1234", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 0x1234);
|
||||
|
||||
r = safe_atoux16("abcd", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 0xabcd);
|
||||
|
||||
r = safe_atoux16(" 1234", &l);
|
||||
assert_se(r == 0);
|
||||
assert_se(l == 0x1234);
|
||||
|
||||
r = safe_atoux16("12345", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atoux16("-1", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atoux16(" -1", &l);
|
||||
assert_se(r == -ERANGE);
|
||||
|
||||
r = safe_atoux16("junk", &l);
|
||||
assert_se(r == -EINVAL);
|
||||
|
||||
r = safe_atoux16("123x", &l);
|
||||
assert_se(r == -EINVAL);
|
||||
|
||||
r = safe_atoux16("12.3", &l);
|
||||
assert_se(r == -EINVAL);
|
||||
|
||||
r = safe_atoux16("", &l);
|
||||
assert_se(r == -EINVAL);
|
||||
}
|
||||
|
||||
static void test_safe_atou64(void) {
|
||||
int r;
|
||||
uint64_t l;
|
||||
@@ -745,6 +783,7 @@ int main(int argc, char *argv[]) {
|
||||
test_safe_atolli();
|
||||
test_safe_atou16();
|
||||
test_safe_atoi16();
|
||||
test_safe_atoux16();
|
||||
test_safe_atou64();
|
||||
test_safe_atoi64();
|
||||
test_safe_atod();
|
||||
|
||||
Reference in New Issue
Block a user