[gmx-developers] Errors in tng_io reading box vectors

Magnus Lundborg magnus.lundborg at scilifelab.se
Wed Jun 15 11:48:29 CEST 2016


Hi Peter,

Thanks for reporting this. The problem has now been addressed in a 
commit to the TNG repository, but it is not yet in the master branch. 
Please continue to report any issues you encounter and I hope that I can 
fix them.

Kind Regards,

Magnus

On 06/13/2016 08:51 PM, Peter Kenneth Eastman wrote:
> I found another error in tng_io.  When compiling on Windows with Visual Studio, trying to load tng_example.tng fails.  The data gets completely corrupted, and many functions return errors.
>
> The problem is in the routines for converting between byte orders (tng_swap_byte_order_little_endian_64 etc.).  Those routines take a signed argument (for example int64_t) and then apply bit shift operators to it, which results in undefined behavior.  See https://www.securecoding.cert.org/confluence/display/c/INT13-C.+Use+bitwise+operators+only+on+unsigned+operands.  It appears that clang and gcc always use zero padding, while Visual Studio uses sign bit extension.  So if the argument happens to be negative, they produce different results.
>
> The fix is to change the argument to uint64_t.  Then you always get zero padding, as intended.
>
> Peter



More information about the gromacs.org_gmx-developers mailing list