|Subject:||IPC::SysV memory operations limited to 31-bit offsets|
|Date:||Wed, 1 May 2019 18:10:10 +0000|
|To:||"bug-IPC-SysV [...] rt.cpan.org" <bug-IPC-SysV [...] rt.cpan.org>|
|From:||"Brown, Chris" <cbrown [...] akamai.com>|
Looking at IPC::SysV 2.07, memread(). I'm running perl 5.18.2 on rh7 but it shouldn't matter. Offsets, (pos) are passed into the XS calls as "int". For example, a IPC::SharedMem::read(bignumber, littlenumber) boils down to void memread(addr, sv, pos, size) SV *addr SV *sv int pos int size ... Copy(caddr + pos, dst, size, char); ... This limits "bignumber" to a 2^31 offset from addr, the base of the shared memory segment. As you probably guessed I was working with a 2.5G shared memory segment and found that things break. memwrite() has the same issue. I would include a patch but since I have not done XS since about 1995, I would probably muck it up badly. I see a similar issue was resolved a decade ago with the creation of a large shared memory segment. Thanks for your attention.