63 lines
2.3 KiB
Diff
63 lines
2.3 KiB
Diff
|
|
From e3e4a09716bca4e748a0156ee8cc50adb5cf8ec5 Mon Sep 17 00:00:00 2001
|
||
|
|
From: Philip Withnall <withnall@endlessm.com>
|
||
|
|
Date: Sat, 19 Jan 2019 01:07:57 +0000
|
||
|
|
Subject: [PATCH 482/682] 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);
|
||
|
|
--
|
||
|
|
2.19.1
|
||
|
|
|