Return EOVERFLOW like FreeBSD does if the buffer size exceeds INT_MAX
(well FreeBSD documents INT_MAX + 1, but in the code it is INT_MAX).
This commit is contained in:
parent
eebab7e491
commit
3a55b33865
@ -1,4 +1,4 @@
|
||||
.\" $NetBSD: printf.3,v 1.63 2013/05/04 19:17:38 wiz Exp $
|
||||
.\" $NetBSD: printf.3,v 1.64 2014/09/29 14:58:33 christos Exp $
|
||||
.\"
|
||||
.\" Copyright (c) 1990, 1991, 1993
|
||||
.\" The Regents of the University of California. All rights reserved.
|
||||
@ -33,7 +33,7 @@
|
||||
.\"
|
||||
.\" @(#)printf.3 8.1 (Berkeley) 6/4/93
|
||||
.\"
|
||||
.Dd May 4, 2013
|
||||
.Dd September 29, 2014
|
||||
.Dt PRINTF 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
@ -799,6 +799,13 @@ family of functions may fail if:
|
||||
An invalid wide-character code was encountered.
|
||||
.It Bq Er ENOMEM
|
||||
Insufficient storage space is available.
|
||||
.It Bq Er EOVERFLOW
|
||||
The
|
||||
.Fa size
|
||||
argument exceeds
|
||||
.Dv INT_MAX ,
|
||||
or the return value would be too large to be represented by an
|
||||
.Vt int .
|
||||
.El
|
||||
.Sh SEE ALSO
|
||||
.Xr printf 1 ,
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: vsnprintf.c,v 1.27 2013/05/17 12:55:57 joerg Exp $ */
|
||||
/* $NetBSD: vsnprintf.c,v 1.28 2014/09/29 14:58:33 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
@ -37,7 +37,7 @@
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)vsnprintf.c 8.1 (Berkeley) 6/4/93";
|
||||
#else
|
||||
__RCSID("$NetBSD: vsnprintf.c,v 1.27 2013/05/17 12:55:57 joerg Exp $");
|
||||
__RCSID("$NetBSD: vsnprintf.c,v 1.28 2014/09/29 14:58:33 christos Exp $");
|
||||
#endif
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
@ -76,8 +76,8 @@ vsnprintf_l(char *str, size_t n, locale_t loc, const char *fmt, va_list ap)
|
||||
_DIAGASSERT(n == 0 || str != NULL);
|
||||
_DIAGASSERT(fmt != NULL);
|
||||
|
||||
if ((int)n < 0) {
|
||||
errno = EINVAL;
|
||||
if (n > INT_MAX) {
|
||||
errno = EOVERFLOW;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: vsnprintf_ss.c,v 1.12 2012/03/15 18:22:31 christos Exp $ */
|
||||
/* $NetBSD: vsnprintf_ss.c,v 1.13 2014/09/29 14:58:33 christos Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1990, 1993
|
||||
@ -37,7 +37,7 @@
|
||||
#if 0
|
||||
static char sccsid[] = "@(#)vsnprintf.c 8.1 (Berkeley) 6/4/93";
|
||||
#else
|
||||
__RCSID("$NetBSD: vsnprintf_ss.c,v 1.12 2012/03/15 18:22:31 christos Exp $");
|
||||
__RCSID("$NetBSD: vsnprintf_ss.c,v 1.13 2014/09/29 14:58:33 christos Exp $");
|
||||
#endif
|
||||
#endif /* LIBC_SCCS and not lint */
|
||||
|
||||
@ -144,8 +144,8 @@ vsnprintf_ss(char *sbuf, size_t slen, const char *fmt0, va_list ap)
|
||||
_DIAGASSERT(slen == 0 || sbuf != NULL);
|
||||
_DIAGASSERT(fmt0 != NULL);
|
||||
|
||||
if ((int)slen < 0) {
|
||||
errno = EINVAL;
|
||||
if (slen > INT_MAX) {
|
||||
errno = EOVERFLOW;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user