Kaydet (Commit) e84b7403 authored tarafından Tim Peters's avatar Tim Peters

Obscure marshal fixes:

    When reading a short, sign-extend on platforms where shorts are
    bigger than 16 bits.
    When reading a long, repair the unportable sign extension that was
    being done for 64-bit machines (it assumed that signed right shift
    sign-extends).
üst a3c6a8a3
......@@ -307,7 +307,8 @@ r_short(RFILE *p)
register short x;
x = r_byte(p);
x |= r_byte(p) << 8;
/* XXX If your short is > 16 bits, add sign-extension here!!! */
/* Sign-extension, in case short greater than 16 bits */
x |= -(x & 0x8000);
return x;
}
......@@ -330,8 +331,7 @@ r_long(RFILE *p)
}
#if SIZEOF_LONG > 4
/* Sign extension for 64-bit machines */
x <<= (8*sizeof(long) - 32);
x >>= (8*sizeof(long) - 32);
x |= -(x & 0x80000000L);
#endif
return x;
}
......@@ -342,7 +342,7 @@ r_long64(RFILE *p)
register long x;
x = r_long(p);
#if SIZEOF_LONG > 4
x = (x & 0xFFFFFFFF) | (r_long(p) << 32);
x = (x & 0xFFFFFFFFL) | (r_long(p) << 32);
#else
if (r_long(p) != 0) {
PyObject *f = PySys_GetObject("stderr");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment