Skip to content

Commit 8fe63e5

Browse files
Increase robustness against UB.
Thanks to elichai2 who noted that the literal '1' is a signed integer, and that shifting a signed 32-bit integer by 31 bits causes an overflow and yields undefined behaviour. While 'scalar_low_impl''s 'secp256k1_scalar_cadd_bit' is only used for testing purposes and currently the 'bit' parameter is only 0 or 1, it is better to avoid undefined behaviour in case the used domain of 'secp256k1_scalar_cadd_bit' expands.
1 parent fa33017 commit 8fe63e5

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/scalar_low_impl.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ static int secp256k1_scalar_add(secp256k1_scalar *r, const secp256k1_scalar *a,
3838

3939
static void secp256k1_scalar_cadd_bit(secp256k1_scalar *r, unsigned int bit, int flag) {
4040
if (flag && bit < 32)
41-
*r += (1 << bit);
41+
*r += ((uint32_t)1 << bit);
4242
#ifdef VERIFY
4343
VERIFY_CHECK(secp256k1_scalar_check_overflow(r) == 0);
4444
#endif

0 commit comments

Comments
 (0)