[Nauty] Patch for undefined behavior
Brendan McKay
Brendan.McKay at anu.edu.au
Thu Sep 3 16:37:17 AEST 2026
Hi James,
I had found the nausha.c issue myself by the same method.
Not the watercluster2.c issue though; now it is done.
As always, thanks for reporting.
Cheers, Brendan.
On 3/9/2026 8:10 am, Jerry James via Nauty wrote:
> If nauty 2.9.3 is built with -fsanitize=undefined, two instances of
> undefined behavior are identified while running the tests, both due to
> signed integer overflow. I would like to suggest the patch below so
> that overflow only happens with unsigned integers. In the nausha.c
> case, data is an array of 1-byte quantities, which are automatically
> promoted to int, a signed type, when used in an arithmetic expression.
> The fix is to explicitly convert to an unsigned 32-bit type. In the
> watercluster2.c case, since qual can overflow, make it an unsigned
> variable and cast to a signed type when returning the result. All
> tests pass after making these changes.
>
> --- nauty2_9_3/nausha.c.orig
> +++ nauty2_9_3/nausha.c
> @@ -74,8 +74,8 @@ sha256_transform(SHA256_CTX *ctx, const
> nsword32 a, b, c, d, e, f, g, h, i, j, t1, t2, m[64];
>
> for (i = 0, j = 0; i < 16; ++i, j += 4)
> - m[i] = (data[j] << 24) | (data[j + 1] << 16)
> - | (data[j + 2] << 8) | (data[j + 3]);
> + m[i] = ((nsword32)data[j] << 24) | ((nsword32)data[j + 1] << 16)
> + | ((nsword32)data[j + 2] << 8) | ((nsword32)data[j + 3]);
> for ( ; i < 64; ++i)
> m[i] = SIG1(m[i - 2]) + m[i - 7] + SIG0(m[i - 15]) + m[i - 16];
>
> --- nauty2_9_3/watercluster2.c.orig
> +++ nauty2_9_3/watercluster2.c
> @@ -3130,13 +3130,13 @@ int i,start,end, problem, sum, maxsum;
> int getexpensivequality(graph x,graph y)
> {
> int j;
> -int qual=0;
> +unsigned int qual=0;
>
> FORALLELEMENTS(x,j) qual+=(saturated[j]<<4)-indeg_free[j];
> qual = qual<<6;
> FORALLELEMENTS(y,j) qual+=(saturated[j]<<4)-indeg_free[j];
>
> - return qual;
> + return (int)qual;
> }
>
> int is_canonical_edge(BOOG list[],int last_positie)
>
> Regards,
More information about the Nauty
mailing list