From 937a5639fccd8eb295e9bf2f11a5774cb1989195 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Fri, 5 Dec 2014 12:55:40 +0100 Subject: [PATCH] libnm: return 0 for empty address in hwaddr_binary_len() Motivated by avoiding compiler warning with -O2 -Wstrict-overflow (gcc-4.8.3): make[4]: Entering directory `./NetworkManager/libnm-core' CC nm-utils.lo ../libnm-core/nm-utils.c: In function 'nm_utils_hwaddr_valid': ../libnm-core/nm-utils.c:2725:14: error: assuming signed overflow does not occur when simplifying conditional to constant [-Werror=strict-overflow] if (length == 0 || length > NM_UTILS_HWADDR_LEN_MAX) ^ ../libnm-core/nm-utils.c: In function 'nm_utils_hwaddr_canonical': ../libnm-core/nm-utils.c:2755:14: error: assuming signed overflow does not occur when simplifying conditional to constant [-Werror=strict-overflow] if (length == 0 || length > NM_UTILS_HWADDR_LEN_MAX) ^ https://bugzilla.gnome.org/show_bug.cgi?id=741168 --- libnm-core/nm-utils.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/libnm-core/nm-utils.c b/libnm-core/nm-utils.c index f104925c37..0f85e52a0e 100644 --- a/libnm-core/nm-utils.c +++ b/libnm-core/nm-utils.c @@ -2693,6 +2693,9 @@ hwaddr_binary_len (const char *asc) { int octets = 1; + if (!*asc) + return 0; + for (; *asc; asc++) { if (*asc == ':' || *asc == '-') octets++; @@ -2827,7 +2830,7 @@ nm_utils_hwaddr_matches (gconstpointer hwaddr1, g_return_val_if_fail (hwaddr1 != NULL, FALSE); hwaddr1_len = hwaddr_binary_len (hwaddr1); - if (hwaddr1_len > NM_UTILS_HWADDR_LEN_MAX) + if (hwaddr1_len == 0 || hwaddr1_len > NM_UTILS_HWADDR_LEN_MAX) return FALSE; if (!nm_utils_hwaddr_aton (hwaddr1, buf1, hwaddr1_len)) return FALSE; @@ -2880,7 +2883,7 @@ _nm_utils_hwaddr_to_dbus (const GValue *prop_value) if (str) { len = hwaddr_binary_len (str); - g_return_val_if_fail (len <= NM_UTILS_HWADDR_LEN_MAX, NULL); + g_return_val_if_fail (len > 0 && len <= NM_UTILS_HWADDR_LEN_MAX, NULL); if (!nm_utils_hwaddr_aton (str, buf, len)) len = 0; } else