> Author: martin.v.loewis > Date: Tue Jan 3 14:16:53 2006 > New Revision: 41906 > > Modified: > python/branches/ssize_t/Objects/obmalloc.c > Log: > Disable 32-bit size limitation for 64-bit mode. > > > Modified: python/branches/ssize_t/Objects/obmalloc.c > ============================================================================== > --- python/branches/ssize_t/Objects/obmalloc.c (original) > +++ python/branches/ssize_t/Objects/obmalloc.c Tue Jan 3 14:16:53 2006 > @@ -1005,6 +1005,8 @@ > > bumpserialno(); > total = nbytes + 16; > +#if SIZEOF_SIZE_T < 8 > + /* XXX do this check only on 32-bit machines */ > if (total < nbytes || (total >> 31) > 1) { > /* overflow, or we can't represent it in 4 bytes */ > /* Obscure: can't do (total >> 32) != 0 instead, because > @@ -1013,6 +1015,7 @@ > size_t is an unsigned type. */ > return NULL; > } > +#endif
This checkin should be reverted for now. It's in _PyObject_DebugMalloc, and at present the layout of the extra debug info in a PYMALLOC_DEBUG build is hard-coded to use 4-byte fields, no matter what sizeof(size_t) may be. One of the extra fields recorded in a PYMALLOC_DEBUG build is the number of bytes requested, and at present it's simply not capable of recording a value that doesn't fit in 4 bytes. Even after (if ever ;-)) this is changed to support recording 8-byte values on a box where sizeof(size_t) == 8, the "total < nbytes" part of the test would still be appropriate: PyObject_DebugMalloc requests more memory (`total`) than the user asked for (`nbytes`), and the computation of `total` may have overflowed. That's what "total < nbytes" is checking, and that's the right way to spell the overflow check on any box. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com