[Nasm-bugs] [Bug 3392368] "exponent 32 is too large" undefined behavior at float.c line 559.

no-reply at bugzilla-nasm.gorcunov.org no-reply at bugzilla-nasm.gorcunov.org
Wed Apr 26 17:48:55 PDT 2017


--- Comment #3 from Brooks Moses <bmoses at google.com> ---
Here's how I'm reproducing this:

First, this was compiled with a trunk version of Clang, for x86_64 target, with
the command-line option "-fsanitize=shift-exponent" in order to catch the
undefined behavior.  (Otherwise it will silently succeed.)

Then, I simply ran it as "./nasm sources/test/radix.asm" where "source" is the
directory with the NASM 2.12.02 sources.

However, there's a less compiler-dependent way to reproduce this: Add an
"abort" call to float.c around line 559, here:

            if (seendigit) {
                if (ms <= 0) {
                    *mp |= v >> -ms;
                    if (mp > &mult[MANT_LIMBS])
                        mp = &mult[MANT_LIMBS]; /* Guard slot */
                    ms += LIMB_BITS;
                if (ms == 32) abort();
                *mp |= v << ms;
                ms -= bits;

I have confirmed that this aborts with both Clang and GCC.

You are receiving this mail because:
You are on the CC list for the bug.
You are watching all bug changes.

More information about the Nasm-bugs mailing list