[Nauty] nauty 2.7rc3 has bug fix

Brendan McKay Brendan.McKay at anu.edu.au
Tue Oct 15 14:14:30 AEDT 2019

Dear nauty people,

James Trimble and Chris Jefferson have uncovered a bug that has been
in nauty since version 2.6b10.

In order to have encountered this  bug, all of the following must be true:
   (a) You called densenauty() or sparsenauty() rather than calling
       the procedure nauty() directly.
   (b) You were processing graphs with 20 or more vertices.
   (c) You compiled naugraph.c or sparsegraph.c with an explicit
       value of MAXN other than the default MAXN=0.
       This includes using the libraries nauty1.a, nautyW1.a
       and nautyL1.a. However nauty.a, nautyW.a and nautyL.a
       were safe.  Likewise, the utilities distributed with nauty were
       all safe.  The bug did not affect Traces.

My sincere apology for any problems this causes.

Versions 2.6r11 and 2.7rc2 are withdrawn and replaced on the
web pages by 2.6r12 and 2.7rc3 respectively.

If you want to fix the bug yourself:

About line 57 of naugraph.c, change
    static TLS_ATTR set dnwork[40*MAXM];
    static TLS_ATTR set dnwork[2*60*MAXM];

About line 77 of nausparse.c, change
    static TLS_ATTR set snwork[40*MAXM];
    static TLS_ATTR set snwork[2*60*MAXM];



Here are further notes on version 2.7rc3:

* Fixed the type of the 4th parameter of options.usercanonproc.

* Check kill requests more often. If the global int variable
   nauty_kill_request becomes nonzero, nauty and Traces will
   exit at certain key points. In dreadnaut nauty_kill_request
   is set if the user types control-C (if the operating system
   provides this facility).

* nauty.h loads <limits.h> and <stdint.h> if they exist.

* Some features were added to assist installation on non-POSIX
   systems or where 'configure' can't be easily run, such as
   Microsoft Visual Studio. These changes are mostly in nauty.h.
   1. The predefined names _MSC_VER, _WIN32 and _WIN64 are examined.
   2. HAVE_HWLZCNT and HAVE_HWPOPCNT can be defined at compile time
      (to 0 or 1) to indicate the presence of hardware lzcnt and popcnt
   3. The FIRSTBITNZ, FIRSTBIT and POPCOUNT macros can be defined
      at compile time (though it is unlikely you will be able to do
      much better than the default versions). FIRSTBIT is defined
      in terms of FIRSTBITNZ if it isn't defined separately.
   4. Loading of unavailable header files can be disabled by
      predefining macros: AVOID_SYS_TYPES_H, AVOID_UNISTD_H,
   There is more to do here; there are lots of variations in
   different software versions and documentation is inconsistent.
   Thanks to Andy Mercier for discussions so far.

* Bug fixed in directg that caused a crash for digraph6 output
   over WORDSIZE vertices.

* The external variables labelorg and nauty_kill_request were
   moved into the "C" block of nauty.h for C++ compatibility.

This version will become the official release of 2.7 unless
problems are reported.



More information about the Nauty mailing list