On Jan 5, 7:11 pm, Bill Hart <goodwillh...@googlemail.com> wrote:
> I doubt it. In the test code you have:
>
> ASSERT_ALWAYS (putc ((size >> (j*8)) & 0xFF, fp) != EOF);
>
> should that 0xFF be 0xFFLL or something like that on Windows?

I found the bug - its in lines 80-82 in inp_raw.c

  if (sizeof (csize) > 4 && csize & 0x80000000L)
    csize -= 0x80000000L << 1;

This is intended to sign extend csize if it is longer than 4 bytes.
But the constant is a 32-bit value so shifting it left 1 is makes it
zero.

So the sign extension fails. It needs to be coerced to an mp_size_t
before shifting and then OR'd in (or equivalent):

  if (sizeof (csize) > 4 && csize & 0x80000000L)
    csize |= ((mp_size_t)0x80000000l) < 1

      Brian
-- 
You received this message because you are subscribed to the Google Groups 
"mpir-devel" group.
To post to this group, send email to mpir-de...@googlegroups.com.
To unsubscribe from this group, send email to 
mpir-devel+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/mpir-devel?hl=en.


Reply via email to