aboutsummaryrefslogtreecommitdiffstats
path: root/wsutil
diff options
context:
space:
mode:
Diffstat (limited to 'wsutil')
-rw-r--r--wsutil/sign_ext.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/wsutil/sign_ext.h b/wsutil/sign_ext.h
index 26d590a693..4371cacde6 100644
--- a/wsutil/sign_ext.h
+++ b/wsutil/sign_ext.h
@@ -30,6 +30,11 @@
static inline guint32
ws_sign_ext32(guint32 val, int no_of_bits)
{
+ g_assert (no_of_bits >= 0 && no_of_bits <= 32);
+
+ if (no_of_bits == 0)
+ return val;
+
if (val & (1 << (no_of_bits-1)))
val |= (-1 << no_of_bits);
@@ -39,6 +44,11 @@ ws_sign_ext32(guint32 val, int no_of_bits)
static inline guint64
ws_sign_ext64(guint64 val, int no_of_bits)
{
+ g_assert (no_of_bits >= 0 && no_of_bits <= 64);
+
+ if (no_of_bits == 0)
+ return val;
+
if (val & (G_GINT64_CONSTANT(1) << (no_of_bits-1)))
val |= (G_GINT64_CONSTANT(-1) << no_of_bits);