Commit 1d0fe31
committed
Packer.pack_uhyper(): Fixes needed to properly pack unsigned 64 bit
longs where the top bit is set. First, change the masks so that they
are `L' longs, otherwise the sign bits will get propagated to the
result. Next, do not coerce to int before sending to pack_uint()
otherwise Python will generate an OverflowError. Here is a test
program that fails without the patch, but now succeeds:
import xdrlib
addr = (132, 151, 1, 71)
uint = 0L
for a in addr:
uint = (uint << 8) | a
ulong64 = uint << 32
p = xdrlib.Packer()
p.pack_uhyper(ulong64)
buf = p.get_buffer()
u = xdrlib.Unpacker(buf)
ulong64prime = u.unpack_uhyper()
if ulong64 == ulong64prime:
print 'okay'
else:
print 'bogus'
print ulong64, ulong64prime1 parent 8d1ac02 commit 1d0fe31
1 file changed
Lines changed: 2 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
58 | | - | |
59 | | - | |
| 58 | + | |
| 59 | + | |
60 | 60 | | |
61 | 61 | | |
62 | 62 | | |
| |||
0 commit comments