aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common/vsprintf.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2008-09-22 15:15:19 +0100
committerKeir Fraser <keir.fraser@citrix.com>2008-09-22 15:15:19 +0100
commit2d4c3c5c9c2c4ebdd4c8b1de3807247f75904376 (patch)
treecf8b9dee8ee1814e9a25f12a31bc258cdce0db28 /xen/common/vsprintf.c
parent13fe69b4a731ddd43b27f888c0a7e79c55ff6c8a (diff)
downloadxen-2d4c3c5c9c2c4ebdd4c8b1de3807247f75904376.tar.gz
xen-2d4c3c5c9c2c4ebdd4c8b1de3807247f75904376.tar.bz2
xen-2d4c3c5c9c2c4ebdd4c8b1de3807247f75904376.zip
vsprintf: Better size_t input checking, and fix return values of
[v]scnprintf() when size <= 0. Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/common/vsprintf.c')
-rw-r--r--xen/common/vsprintf.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/xen/common/vsprintf.c b/xen/common/vsprintf.c
index 5ee5f4efce..8fd1ac25de 100644
--- a/xen/common/vsprintf.c
+++ b/xen/common/vsprintf.c
@@ -272,7 +272,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
/* 'z' changed to 'Z' --davidm 1/25/99 */
/* Reject out-of-range values early */
- BUG_ON((int)size < 0);
+ BUG_ON(((int)size < 0) || ((unsigned int)size != size));
str = buf;
end = buf + size - 1;
@@ -504,8 +504,10 @@ int vscnprintf(char *buf, size_t size, const char *fmt, va_list args)
{
int i;
- i=vsnprintf(buf,size,fmt,args);
- return (i >= size) ? (size - 1) : i;
+ i = vsnprintf(buf,size,fmt,args);
+ if (i >= size)
+ i = size - 1;
+ return (i > 0) ? i : 0;
}
EXPORT_SYMBOL(vscnprintf);
@@ -772,7 +774,9 @@ int scnprintf(char * buf, size_t size, const char *fmt, ...)
va_start(args, fmt);
i = vsnprintf(buf, size, fmt, args);
va_end(args);
- return (i >= size) ? (size - 1) : i;
+ if (i >= size)
+ i = size - 1;
+ return (i > 0) ? i : 0;
}
EXPORT_SYMBOL(scnprintf);