A shift has undefined behaviour if the mathematical result
(lhs * 2^{rhs}) doesn't fit in the range of the resulting type.
In other words, you can't left shift into the sign bit of a
signed integer type.
The error message is:

mm-broadband-modem.c:3308:15: runtime error: left shift of 1 by 31
places cannot be represented in type 'int'
SUMMARY: AddressSanitizer: undefined-behavior mm-broadband-modem.c:3308:15 in
---
 src/mm-broadband-modem.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index d2bfd91..8526646 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -3315,7 +3315,7 @@ get_next_facility_lock_status
(LoadEnabledFacilityLocksContext *ctx)
     guint i;

     for (i = ctx->current; i < sizeof (MMModem3gppFacility) * 8; i++) {
-        guint32 facility = 1 << i;
+        guint32 facility = 1u << i;

         /* Found the next one to query! */
         if (ctx->facilities & facility) {
--
2.6.0.rc2.230.g3dd15c0
From 76dcddf65c768f1aefc28dd3d6e3843e5c2124c1 Mon Sep 17 00:00:00 2001
From: Yunlian Jiang <yunl...@google.com>
Date: Wed, 28 Oct 2015 14:16:24 -0700
Subject: [PATCH] fix a undifined behavior.

. A shift has undefined behaviour if the mathematical result
(lhs * 2^{rhs}) doesn't fit in the range of the resulting type.
In other words, you can't left shift into the sign bit of a
signed integer type.
The error message is:

mm-broadband-modem.c:3308:15: runtime error: left shift of 1 by 31 places cannot be represented in type 'int'
SUMMARY: AddressSanitizer: undefined-behavior mm-broadband-modem.c:3308:15 in
---
 src/mm-broadband-modem.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/mm-broadband-modem.c b/src/mm-broadband-modem.c
index d2bfd91..8526646 100644
--- a/src/mm-broadband-modem.c
+++ b/src/mm-broadband-modem.c
@@ -3315,7 +3315,7 @@ get_next_facility_lock_status (LoadEnabledFacilityLocksContext *ctx)
     guint i;
 
     for (i = ctx->current; i < sizeof (MMModem3gppFacility) * 8; i++) {
-        guint32 facility = 1 << i;
+        guint32 facility = 1u << i;
 
         /* Found the next one to query! */
         if (ctx->facilities & facility) {
-- 
2.6.0.rc2.230.g3dd15c0

_______________________________________________
ModemManager-devel mailing list
ModemManager-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/modemmanager-devel

Reply via email to