mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-23 11:20:07 +00:00
Fix extension of array in extended printf format handling
This commit is contained in:
parent
f0b264f174
commit
a4647e727a
@ -1,3 +1,8 @@
|
|||||||
|
2011-12-17 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
[BZ #13446]
|
||||||
|
* stdio-common/vfprintf.c (vfprintf): Fix extension of specs array.
|
||||||
|
|
||||||
2011-11-22 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
2011-11-22 Adhemerval Zanella <azanella@linux.vnet.ibm.com>
|
||||||
|
|
||||||
* sysdeps/powerpc/Makefile: Added locale-defines.sym generation.
|
* sysdeps/powerpc/Makefile: Added locale-defines.sym generation.
|
||||||
|
4
NEWS
4
NEWS
@ -12,8 +12,8 @@ Version 2.15
|
|||||||
6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
|
6779, 6783, 9696, 10103, 10709, 11589, 12403, 12847, 12868, 12852, 12874,
|
||||||
12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
|
12885, 12892, 12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090,
|
||||||
13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13192,
|
13092, 13114, 13118, 13123, 13134, 13138, 13147, 13150, 13179, 13192,
|
||||||
13268, 13276, 13291, 13335, 13337, 13344, 13358, 13367, 13472, 13484,
|
13268, 13276, 13291, 13335, 13337, 13344, 13358, 13367, 13446, 13472,
|
||||||
13506
|
13484, 13506
|
||||||
|
|
||||||
* New program pldd to list loaded object of a process
|
* New program pldd to list loaded object of a process
|
||||||
Implemented by Ulrich Drepper.
|
Implemented by Ulrich Drepper.
|
||||||
|
@ -1640,9 +1640,9 @@ do_positional:
|
|||||||
/* Array with information about the needed arguments. This has to
|
/* Array with information about the needed arguments. This has to
|
||||||
be dynamically extensible. */
|
be dynamically extensible. */
|
||||||
size_t nspecs = 0;
|
size_t nspecs = 0;
|
||||||
size_t nspecs_max = 32; /* A more or less arbitrary start value. */
|
/* A more or less arbitrary start value. */
|
||||||
struct printf_spec *specs
|
size_t nspecs_size = 32 * sizeof (struct printf_spec);
|
||||||
= alloca (nspecs_max * sizeof (struct printf_spec));
|
struct printf_spec *specs = alloca (nspecs_size);
|
||||||
|
|
||||||
/* The number of arguments the format string requests. This will
|
/* The number of arguments the format string requests. This will
|
||||||
determine the size of the array needed to store the argument
|
determine the size of the array needed to store the argument
|
||||||
@ -1679,15 +1679,14 @@ do_positional:
|
|||||||
|
|
||||||
for (f = lead_str_end; *f != L_('\0'); f = specs[nspecs++].next_fmt)
|
for (f = lead_str_end; *f != L_('\0'); f = specs[nspecs++].next_fmt)
|
||||||
{
|
{
|
||||||
if (nspecs >= nspecs_max)
|
if (nspecs * sizeof (*specs) >= nspecs_size)
|
||||||
{
|
{
|
||||||
/* Extend the array of format specifiers. */
|
/* Extend the array of format specifiers. */
|
||||||
struct printf_spec *old = specs;
|
struct printf_spec *old = specs;
|
||||||
specs = extend_alloca (specs, nspecs_max,
|
specs = extend_alloca (specs, nspecs_size, 2 * nspecs_size);
|
||||||
2 * nspecs_max * sizeof (*specs));
|
|
||||||
|
|
||||||
/* Copy the old array's elements to the new space. */
|
/* Copy the old array's elements to the new space. */
|
||||||
memmove (specs, old, nspecs * sizeof (struct printf_spec));
|
memmove (specs, old, nspecs * sizeof (*specs));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parse the format specifier. */
|
/* Parse the format specifier. */
|
||||||
|
Loading…
Reference in New Issue
Block a user