summaryrefslogtreecommitdiff
path: root/lib/error.c
diff options
context:
space:
mode:
authorSiddhesh Poyarekar <siddhesh@redhat.com>2014-07-09 15:26:17 +0530
committerSiddhesh Poyarekar <siddhesh@redhat.com>2014-07-10 13:54:39 +0530
commit49c19fe3e5213a94031b0eb92b74b7f63ee29296 (patch)
tree7ae5134ae34aa82cfa3d2c3acd7b73b2ed44ef92 /lib/error.c
parent2d280742a9e30088aa169f53353765d5daafe4c0 (diff)
downloadgnulib-49c19fe3e5213a94031b0eb92b74b7f63ee29296.tar.gz
Sync up error.c with glibc
This is a partial sync-up of error.c with glibc. The following changes went in: - Get rid of the INTUSE macro - Remove unused macro ALLOCA_LIMIT - Fix a potential buffer overflow in error_tail (sourceware bz #15672) - Fix a potential NULL dereference in strcmp error: Sync from glibc master * lib/error.c [_LIBC]: Remove INTUSE usage. (error_tail): Remove unused macro ALLOCA_LIMIT. Fix potential buffer overflow. Fix potential NULL dereference in strcmp.
Diffstat (limited to 'lib/error.c')
-rw-r--r--lib/error.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/error.c b/lib/error.c
index 31109df3b5..9a3525a882 100644
--- a/lib/error.c
+++ b/lib/error.c
@@ -77,9 +77,9 @@ extern void __error_at_line (int status, int errnum, const char *file_name,
# define error_at_line __error_at_line
# include <libio/iolibio.h>
-# define fflush(s) INTUSE(_IO_fflush) (s)
+# define fflush(s) _IO_fflush (s)
# undef putc
-# define putc(c, fp) INTUSE(_IO_putc) (c, fp)
+# define putc(c, fp) _IO_putc (c, fp)
# include <bits/libc-lock.h>
@@ -201,7 +201,6 @@ error_tail (int status, int errnum, const char *message, va_list args)
#if _LIBC
if (_IO_fwide (stderr, 0) > 0)
{
-# define ALLOCA_LIMIT 2000
size_t len = strlen (message) + 1;
wchar_t *wmessage = NULL;
mbstate_t st;
@@ -237,7 +236,7 @@ error_tail (int status, int errnum, const char *message, va_list args)
if (res != len)
break;
- if (__builtin_expect (len >= SIZE_MAX / 2, 0))
+ if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0))
{
/* This really should not happen if everything is fine. */
res = (size_t) -1;
@@ -342,7 +341,10 @@ error_at_line (int status, int errnum, const char *file_name,
if (old_line_number == line_number
&& (file_name == old_file_name
- || strcmp (old_file_name, file_name) == 0))
+ || (old_file_name != NULL
+ && file_name != NULL
+ && strcmp (old_file_name, file_name) == 0)))
+
/* Simply return and print nothing. */
return;