diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-09-22 15:15:19 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-09-22 15:15:19 +0100 |
commit | 2d4c3c5c9c2c4ebdd4c8b1de3807247f75904376 (patch) | |
tree | cf8b9dee8ee1814e9a25f12a31bc258cdce0db28 /xen/common/vsprintf.c | |
parent | 13fe69b4a731ddd43b27f888c0a7e79c55ff6c8a (diff) | |
download | xen-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.c | 12 |
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); |