[glib: 1/2] gvariant-parser: Add explicit unsigned-to-signed casts



commit e3e4a09716bca4e748a0156ee8cc50adb5cf8ec5
Author: Philip Withnall <withnall endlessm com>
Date:   Sat Jan 19 01:07:57 2019 +0000

    gvariant-parser: Add explicit unsigned-to-signed casts
    
    Rather than prefixing unsigned numbers with unary minus operators and
    expecting the implicit cast to carry the correct value through, add an
    explicit cast to a signed type before the unary minus is applied.
    
    In all four cases, an overflow check has already been done.
    
    Signed-off-by: Philip Withnall <withnall endlessm com>
    
    https://gitlab.gnome.org/GNOME/glib/issues/1655

 glib/gvariant-parser.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
---
diff --git a/glib/gvariant-parser.c b/glib/gvariant-parser.c
index b860d42f4..2b02ec90f 100644
--- a/glib/gvariant-parser.c
+++ b/glib/gvariant-parser.c
@@ -1921,7 +1921,7 @@ number_get_value (AST                 *ast,
     case 'n':
       if (abs_val - negative > G_MAXINT16)
         return number_overflow (ast, type, error);
-      return g_variant_new_int16 (negative ? -abs_val : abs_val);
+      return g_variant_new_int16 (negative ? -((gint16) abs_val) : abs_val);
 
     case 'q':
       if (negative || abs_val > G_MAXUINT16)
@@ -1931,7 +1931,7 @@ number_get_value (AST                 *ast,
     case 'i':
       if (abs_val - negative > G_MAXINT32)
         return number_overflow (ast, type, error);
-      return g_variant_new_int32 (negative ? -abs_val : abs_val);
+      return g_variant_new_int32 (negative ? -((gint32) abs_val) : abs_val);
 
     case 'u':
       if (negative || abs_val > G_MAXUINT32)
@@ -1941,7 +1941,7 @@ number_get_value (AST                 *ast,
     case 'x':
       if (abs_val - negative > G_MAXINT64)
         return number_overflow (ast, type, error);
-      return g_variant_new_int64 (negative ? -abs_val : abs_val);
+      return g_variant_new_int64 (negative ? -((gint64) abs_val) : abs_val);
 
     case 't':
       if (negative)
@@ -1951,7 +1951,7 @@ number_get_value (AST                 *ast,
     case 'h':
       if (abs_val - negative > G_MAXINT32)
         return number_overflow (ast, type, error);
-      return g_variant_new_handle (negative ? -abs_val : abs_val);
+      return g_variant_new_handle (negative ? -((gint32) abs_val) : abs_val);
 
     default:
       return ast_type_error (ast, type, error);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]