mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
Update.
1999-11-10 Andreas Jaeger <aj@suse.de> * string/strsignal.c (strsignal): Correct check for snprintf return value. * argp/argp-fmtstream.c (__argp_fmtstream_printf): Likewise. * misc/efgcvt_r.c (APPEND): Correct check for too small buffer according to changed snprintf return value. Reported by Lawrence K. Chen <lchen@opentext.com>. * misc/tst-efgcvt.c (special): Add tests for a too small buffer for ecvt_r and fcvt_r.
This commit is contained in:
13
ChangeLog
13
ChangeLog
@ -1,3 +1,16 @@
|
|||||||
|
1999-11-10 Andreas Jaeger <aj@suse.de>
|
||||||
|
|
||||||
|
* string/strsignal.c (strsignal): Correct check for snprintf
|
||||||
|
return value.
|
||||||
|
* argp/argp-fmtstream.c (__argp_fmtstream_printf): Likewise.
|
||||||
|
|
||||||
|
* misc/efgcvt_r.c (APPEND): Correct check for too small buffer
|
||||||
|
according to changed snprintf return value.
|
||||||
|
Reported by Lawrence K. Chen <lchen@opentext.com>.
|
||||||
|
|
||||||
|
* misc/tst-efgcvt.c (special): Add tests for a too small buffer
|
||||||
|
for ecvt_r and fcvt_r.
|
||||||
|
|
||||||
1999-11-09 Ulrich Drepper <drepper@cygnus.com>
|
1999-11-09 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
* elf/dl-load.c (_dl_dst_count): Allow $ORIGIN to point to
|
* elf/dl-load.c (_dl_dst_count): Allow $ORIGIN to point to
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Word-wrapping and line-truncating streams
|
/* Word-wrapping and line-truncating streams
|
||||||
Copyright (C) 1997, 1998 Free Software Foundation, Inc.
|
Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Written by Miles Bader <miles@gnu.ai.mit.edu>.
|
Written by Miles Bader <miles@gnu.ai.mit.edu>.
|
||||||
|
|
||||||
@ -362,6 +362,7 @@ ssize_t
|
|||||||
__argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...)
|
__argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
int out;
|
int out;
|
||||||
|
size_t avail;
|
||||||
size_t size_guess = PRINTF_SIZE_GUESS; /* How much space to reserve. */
|
size_t size_guess = PRINTF_SIZE_GUESS; /* How much space to reserve. */
|
||||||
|
|
||||||
do
|
do
|
||||||
@ -370,13 +371,15 @@ __argp_fmtstream_printf (struct argp_fmtstream *fs, const char *fmt, ...)
|
|||||||
|
|
||||||
if (! __argp_fmtstream_ensure (fs, size_guess))
|
if (! __argp_fmtstream_ensure (fs, size_guess))
|
||||||
return -1;
|
return -1;
|
||||||
size_guess += size_guess;
|
|
||||||
|
|
||||||
va_start (args, fmt);
|
va_start (args, fmt);
|
||||||
out = __vsnprintf (fs->p, fs->end - fs->p, fmt, args);
|
avail = fs->end - fs->p;
|
||||||
|
out = __vsnprintf (fs->p, avail, fmt, args);
|
||||||
va_end (args);
|
va_end (args);
|
||||||
|
if (out >= avail)
|
||||||
|
size_guess = out + 1;
|
||||||
}
|
}
|
||||||
while (out == -1);
|
while (out >= avail);
|
||||||
|
|
||||||
fs->p += out;
|
fs->p += out;
|
||||||
|
|
||||||
|
@ -101,7 +101,8 @@ APPEND (FUNC_PREFIX, fcvt_r) (value, ndigit, decpt, sign, buf, len)
|
|||||||
|
|
||||||
n = __snprintf (buf, len, "%.*" FLOAT_FMT_FLAG "f", MIN (ndigit, NDIGIT_MAX),
|
n = __snprintf (buf, len, "%.*" FLOAT_FMT_FLAG "f", MIN (ndigit, NDIGIT_MAX),
|
||||||
value);
|
value);
|
||||||
if (n < 0)
|
/* Check for a too small buffer. */
|
||||||
|
if (n >= len)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
|
@ -120,8 +120,9 @@ test (testcase tests[], efcvt_func efcvt, const char *name)
|
|||||||
void
|
void
|
||||||
special (void)
|
special (void)
|
||||||
{
|
{
|
||||||
int decpt, sign;
|
int decpt, sign, res;
|
||||||
char *p;
|
char *p;
|
||||||
|
char buf [1024];
|
||||||
|
|
||||||
p = ecvt (NAN, 10, &decpt, &sign);
|
p = ecvt (NAN, 10, &decpt, &sign);
|
||||||
if (sign != 0 || strcmp (p, "nan") != 0)
|
if (sign != 0 || strcmp (p, "nan") != 0)
|
||||||
@ -135,6 +136,20 @@ special (void)
|
|||||||
(void) ecvt (123.456, 10000, &decpt, &sign);
|
(void) ecvt (123.456, 10000, &decpt, &sign);
|
||||||
(void) fcvt (123.456, 10000, &decpt, &sign);
|
(void) fcvt (123.456, 10000, &decpt, &sign);
|
||||||
|
|
||||||
|
/* Some tests for for the reentrant functions. */
|
||||||
|
/* Use a too small buffer. */
|
||||||
|
res = ecvt_r (123.456, 10, &decpt, &sign, buf, 1);
|
||||||
|
if (res == 0)
|
||||||
|
{
|
||||||
|
printf ("ecvt_r with a too small buffer was succesful.\n");
|
||||||
|
++error_count;
|
||||||
|
}
|
||||||
|
res = fcvt_r (123.456, 10, &decpt, &sign, buf, 1);
|
||||||
|
if (res == 0)
|
||||||
|
{
|
||||||
|
printf ("fcvt_r with a too small buffer was succesful.\n");
|
||||||
|
++error_count;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* Copyright (C) 1991, 94, 95, 96, 97, 98 Free Software Foundation, Inc.
|
/* Copyright (C) 1991, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -70,7 +70,7 @@ strsignal (int signum)
|
|||||||
#endif
|
#endif
|
||||||
len = __snprintf (buffer, BUFFERSIZ - 1, _("Unknown signal %d"),
|
len = __snprintf (buffer, BUFFERSIZ - 1, _("Unknown signal %d"),
|
||||||
signum);
|
signum);
|
||||||
if (len < 0)
|
if (len >= BUFFERSIZ)
|
||||||
buffer = NULL;
|
buffer = NULL;
|
||||||
else
|
else
|
||||||
buffer[len] = '\0';
|
buffer[len] = '\0';
|
||||||
|
Reference in New Issue
Block a user