@@ -2031,20 +2031,6 @@ _Py_GetAllocatedBlocks(void)
2031
2031
* it wraps a real allocator, adding extra debugging info to the memory blocks.
2032
2032
*/
2033
2033
2034
- /* Special bytes broadcast into debug memory blocks at appropriate times.
2035
- * Strings of these are unlikely to be valid addresses, floats, ints or
2036
- * 7-bit ASCII. If modified, _PyMem_IsPtrFreed() should be updated as well.
2037
- *
2038
- * Byte patterns 0xCB, 0xBB and 0xFB have been replaced with 0xCD, 0xDD and
2039
- * 0xFD to use the same values than Windows CRT debug malloc() and free().
2040
- */
2041
- #undef CLEANBYTE
2042
- #undef DEADBYTE
2043
- #undef FORBIDDENBYTE
2044
- #define CLEANBYTE 0xCD /* clean (newly allocated) memory */
2045
- #define DEADBYTE 0xDD /* dead (newly freed) memory */
2046
- #define FORBIDDENBYTE 0xFD /* untouchable bytes at each end of a block */
2047
-
2048
2034
/* Uncomment this define to add the "serialno" field */
2049
2035
/* #define PYMEM_DEBUG_SERIALNO */
2050
2036
@@ -2106,14 +2092,14 @@ p[0: S]
2106
2092
p[S]
2107
2093
API ID. See PEP 445. This is a character, but seems undocumented.
2108
2094
p[S+1: 2*S]
2109
- Copies of FORBIDDENBYTE . Used to catch under- writes and reads.
2095
+ Copies of PYMEM_FORBIDDENBYTE . Used to catch under- writes and reads.
2110
2096
p[2*S: 2*S+n]
2111
- The requested memory, filled with copies of CLEANBYTE .
2097
+ The requested memory, filled with copies of PYMEM_CLEANBYTE .
2112
2098
Used to catch reference to uninitialized memory.
2113
2099
&p[2*S] is returned. Note that this is 8-byte aligned if pymalloc
2114
2100
handled the request itself.
2115
2101
p[2*S+n: 2*S+n+S]
2116
- Copies of FORBIDDENBYTE . Used to catch over- writes and reads.
2102
+ Copies of PYMEM_FORBIDDENBYTE . Used to catch over- writes and reads.
2117
2103
p[2*S+n+S: 2*S+n+2*S]
2118
2104
A serial number, incremented by 1 on each call to _PyMem_DebugMalloc
2119
2105
and _PyMem_DebugRealloc.
@@ -2170,15 +2156,15 @@ _PyMem_DebugRawAlloc(int use_calloc, void *ctx, size_t nbytes)
2170
2156
/* at p, write size (SST bytes), id (1 byte), pad (SST-1 bytes) */
2171
2157
write_size_t (p , nbytes );
2172
2158
p [SST ] = (uint8_t )api -> api_id ;
2173
- memset (p + SST + 1 , FORBIDDENBYTE , SST - 1 );
2159
+ memset (p + SST + 1 , PYMEM_FORBIDDENBYTE , SST - 1 );
2174
2160
2175
2161
if (nbytes > 0 && !use_calloc ) {
2176
- memset (data , CLEANBYTE , nbytes );
2162
+ memset (data , PYMEM_CLEANBYTE , nbytes );
2177
2163
}
2178
2164
2179
2165
/* at tail, write pad (SST bytes) and serialno (SST bytes) */
2180
2166
tail = data + nbytes ;
2181
- memset (tail , FORBIDDENBYTE , SST );
2167
+ memset (tail , PYMEM_FORBIDDENBYTE , SST );
2182
2168
#ifdef PYMEM_DEBUG_SERIALNO
2183
2169
write_size_t (tail + SST , serialno );
2184
2170
#endif
@@ -2204,7 +2190,7 @@ _PyMem_DebugRawCalloc(void *ctx, size_t nelem, size_t elsize)
2204
2190
2205
2191
/* The debug free first checks the 2*SST bytes on each end for sanity (in
2206
2192
particular, that the FORBIDDENBYTEs with the api ID are still intact).
2207
- Then fills the original bytes with DEADBYTE .
2193
+ Then fills the original bytes with PYMEM_DEADBYTE .
2208
2194
Then calls the underlying free.
2209
2195
*/
2210
2196
static void
@@ -2222,7 +2208,7 @@ _PyMem_DebugRawFree(void *ctx, void *p)
2222
2208
_PyMem_DebugCheckAddress (api -> api_id , p );
2223
2209
nbytes = read_size_t (q );
2224
2210
nbytes += PYMEM_DEBUG_EXTRA_BYTES ;
2225
- memset (q , DEADBYTE , nbytes );
2211
+ memset (q , PYMEM_DEADBYTE , nbytes );
2226
2212
api -> alloc .free (api -> alloc .ctx , q );
2227
2213
}
2228
2214
@@ -2264,14 +2250,14 @@ _PyMem_DebugRawRealloc(void *ctx, void *p, size_t nbytes)
2264
2250
*/
2265
2251
if (original_nbytes <= sizeof (save )) {
2266
2252
memcpy (save , data , original_nbytes );
2267
- memset (data - 2 * SST , DEADBYTE ,
2253
+ memset (data - 2 * SST , PYMEM_DEADBYTE ,
2268
2254
original_nbytes + PYMEM_DEBUG_EXTRA_BYTES );
2269
2255
}
2270
2256
else {
2271
2257
memcpy (save , data , ERASED_SIZE );
2272
- memset (head , DEADBYTE , ERASED_SIZE + 2 * SST );
2258
+ memset (head , PYMEM_DEADBYTE , ERASED_SIZE + 2 * SST );
2273
2259
memcpy (& save [ERASED_SIZE ], tail - ERASED_SIZE , ERASED_SIZE );
2274
- memset (tail - ERASED_SIZE , DEADBYTE ,
2260
+ memset (tail - ERASED_SIZE , PYMEM_DEADBYTE ,
2275
2261
ERASED_SIZE + PYMEM_DEBUG_EXTRA_BYTES - 2 * SST );
2276
2262
}
2277
2263
@@ -2293,10 +2279,10 @@ _PyMem_DebugRawRealloc(void *ctx, void *p, size_t nbytes)
2293
2279
2294
2280
write_size_t (head , nbytes );
2295
2281
head [SST ] = (uint8_t )api -> api_id ;
2296
- memset (head + SST + 1 , FORBIDDENBYTE , SST - 1 );
2282
+ memset (head + SST + 1 , PYMEM_FORBIDDENBYTE , SST - 1 );
2297
2283
2298
2284
tail = data + nbytes ;
2299
- memset (tail , FORBIDDENBYTE , SST );
2285
+ memset (tail , PYMEM_FORBIDDENBYTE , SST );
2300
2286
#ifdef PYMEM_DEBUG_SERIALNO
2301
2287
write_size_t (tail + SST , block_serialno );
2302
2288
#endif
@@ -2320,7 +2306,8 @@ _PyMem_DebugRawRealloc(void *ctx, void *p, size_t nbytes)
2320
2306
2321
2307
if (nbytes > original_nbytes ) {
2322
2308
/* growing: mark new extra memory clean */
2323
- memset (data + original_nbytes , CLEANBYTE , nbytes - original_nbytes );
2309
+ memset (data + original_nbytes , PYMEM_CLEANBYTE ,
2310
+ nbytes - original_nbytes );
2324
2311
}
2325
2312
2326
2313
return data ;
@@ -2399,7 +2386,7 @@ _PyMem_DebugCheckAddress(char api, const void *p)
2399
2386
* the tail could lead to a segfault then.
2400
2387
*/
2401
2388
for (i = SST - 1 ; i >= 1 ; -- i ) {
2402
- if (* (q - i ) != FORBIDDENBYTE ) {
2389
+ if (* (q - i ) != PYMEM_FORBIDDENBYTE ) {
2403
2390
msg = "bad leading pad byte" ;
2404
2391
goto error ;
2405
2392
}
@@ -2408,7 +2395,7 @@ _PyMem_DebugCheckAddress(char api, const void *p)
2408
2395
nbytes = read_size_t (q - 2 * SST );
2409
2396
tail = q + nbytes ;
2410
2397
for (i = 0 ; i < SST ; ++ i ) {
2411
- if (tail [i ] != FORBIDDENBYTE ) {
2398
+ if (tail [i ] != PYMEM_FORBIDDENBYTE ) {
2412
2399
msg = "bad trailing pad byte" ;
2413
2400
goto error ;
2414
2401
}
@@ -2448,7 +2435,7 @@ _PyObject_DebugDumpAddress(const void *p)
2448
2435
fprintf (stderr , " The %d pad bytes at p-%d are " , SST - 1 , SST - 1 );
2449
2436
ok = 1 ;
2450
2437
for (i = 1 ; i <= SST - 1 ; ++ i ) {
2451
- if (* (q - i ) != FORBIDDENBYTE ) {
2438
+ if (* (q - i ) != PYMEM_FORBIDDENBYTE ) {
2452
2439
ok = 0 ;
2453
2440
break ;
2454
2441
}
@@ -2457,11 +2444,11 @@ _PyObject_DebugDumpAddress(const void *p)
2457
2444
fputs ("FORBIDDENBYTE, as expected.\n" , stderr );
2458
2445
else {
2459
2446
fprintf (stderr , "not all FORBIDDENBYTE (0x%02x):\n" ,
2460
- FORBIDDENBYTE );
2447
+ PYMEM_FORBIDDENBYTE );
2461
2448
for (i = SST - 1 ; i >= 1 ; -- i ) {
2462
2449
const uint8_t byte = * (q - i );
2463
2450
fprintf (stderr , " at p-%d: 0x%02x" , i , byte );
2464
- if (byte != FORBIDDENBYTE )
2451
+ if (byte != PYMEM_FORBIDDENBYTE )
2465
2452
fputs (" *** OUCH" , stderr );
2466
2453
fputc ('\n' , stderr );
2467
2454
}
@@ -2476,7 +2463,7 @@ _PyObject_DebugDumpAddress(const void *p)
2476
2463
fprintf (stderr , " The %d pad bytes at tail=%p are " , SST , (void * )tail );
2477
2464
ok = 1 ;
2478
2465
for (i = 0 ; i < SST ; ++ i ) {
2479
- if (tail [i ] != FORBIDDENBYTE ) {
2466
+ if (tail [i ] != PYMEM_FORBIDDENBYTE ) {
2480
2467
ok = 0 ;
2481
2468
break ;
2482
2469
}
@@ -2485,12 +2472,12 @@ _PyObject_DebugDumpAddress(const void *p)
2485
2472
fputs ("FORBIDDENBYTE, as expected.\n" , stderr );
2486
2473
else {
2487
2474
fprintf (stderr , "not all FORBIDDENBYTE (0x%02x):\n" ,
2488
- FORBIDDENBYTE );
2475
+ PYMEM_FORBIDDENBYTE );
2489
2476
for (i = 0 ; i < SST ; ++ i ) {
2490
2477
const uint8_t byte = tail [i ];
2491
2478
fprintf (stderr , " at tail+%d: 0x%02x" ,
2492
2479
i , byte );
2493
- if (byte != FORBIDDENBYTE )
2480
+ if (byte != PYMEM_FORBIDDENBYTE )
2494
2481
fputs (" *** OUCH" , stderr );
2495
2482
fputc ('\n' , stderr );
2496
2483
}
0 commit comments