[Python-Dev] [Python-checkins] commit of r41906 - python/branches/ssize_t/Objects/obmalloc.c

Tim Peters tim.peters at gmail.com
Tue Jan 3 19:38:03 CET 2006


> 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.


More information about the Python-Dev mailing list