From: Peter Krempa Date: Mon, 9 Sep 2024 14:46:07 +0000 (+0200) Subject: internal: Add helper macro for checking multiply and add overflows X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=23cb6136061501711b57bf8e2b4be7a76c44697f;p=libvirt.git internal: Add helper macro for checking multiply and add overflows The macro does the two checks together so that it's obvious what we're checking as doing it in place is really unpleasant. Signed-off-by: Peter Krempa Reviewed-by: Pavel Hrdina --- diff --git a/src/internal.h b/src/internal.h index 01860efad9..20aa9b1d41 100644 --- a/src/internal.h +++ b/src/internal.h @@ -43,6 +43,17 @@ #define VIR_INT_MULTIPLY_OVERFLOW(a,b) (G_UNLIKELY ((b) > 0 && (a) > G_MAXINT / (b))) +/** + * VIR_MULTIPLY_ADD_IS_OVERFLOW: + * @limit: maximum value of data type + * @value: current value + * @multiply: number @value is going to be multiplied by + * @add: number that will be added to @value after multiplication + */ +#define VIR_MULTIPLY_ADD_IS_OVERFLOW(limit, value, multiply, add) \ + (G_UNLIKELY(((multiply) > 0 && (value) > (limit) / (multiply)) || \ + ((limit) - ((value) * (multiply)) < (add)))) + /* The library itself is allowed to use deprecated functions / * variables, so effectively undefine the deprecated attribute * which would otherwise be defined in libvirt.h.