mirror of https://gitee.com/Nocallback/glibc.git
Browse Source
[BZ #1349] malloc_usable_size returns the usable size in an allocated chunk, which may be >= the requested size. In the case of MALLOC_CHECK_ being exported to > 0 however, only the requested size is usable, since a magic value is written at the end of the request size to trap writes beyond request bounds. Hence, when MALLOC_CHECK_ is exported to > 0, malloc_usable_size() should return the request size.hjl/pr14562/master
6 changed files with 100 additions and 9 deletions
@ -0,0 +1,49 @@ |
|||
/* Ensure that malloc_usable_size returns the request size with
|
|||
MALLOC_CHECK_ exported to a positive value. |
|||
|
|||
Copyright (C) 2012 Free Software Foundation, Inc. |
|||
This file is part of the GNU C Library. |
|||
|
|||
The GNU C Library is free software; you can redistribute it and/or |
|||
modify it under the terms of the GNU Lesser General Public |
|||
License as published by the Free Software Foundation; either |
|||
version 2.1 of the License, or (at your option) any later version. |
|||
|
|||
The GNU C Library is distributed in the hope that it will be useful, |
|||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
|||
Lesser General Public License for more details. |
|||
|
|||
You should have received a copy of the GNU Lesser General Public |
|||
License along with the GNU C Library; if not, see |
|||
<http://www.gnu.org/licenses/>. */
|
|||
|
|||
#include <malloc.h> |
|||
#include <string.h> |
|||
#include <stdio.h> |
|||
|
|||
static int |
|||
do_test (void) |
|||
{ |
|||
size_t usable_size; |
|||
void *p = malloc (7); |
|||
if (!p) |
|||
{ |
|||
printf ("memory allocation failed\n"); |
|||
return 1; |
|||
} |
|||
|
|||
usable_size = malloc_usable_size (p); |
|||
if (usable_size != 7) |
|||
{ |
|||
printf ("malloc_usable_size: expected 7 but got %zu\n", usable_size); |
|||
return 1; |
|||
} |
|||
|
|||
memset (p, 0, usable_size); |
|||
free (p); |
|||
return 0; |
|||
} |
|||
|
|||
#define TEST_FUNCTION do_test () |
|||
#include "../test-skeleton.c" |
|||
Loading…
Reference in new issue