From: André Goddard Rosa Date: Tue, 15 Dec 2009 02:00:56 +0000 (-0800) Subject: vsprintf: pre-calculate final string length for later use X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=6c356634111c5a7a48264d7c9ec28559e4be11a2;p=deliverable%2Flinux.git vsprintf: pre-calculate final string length for later use Signed-off-by: André Goddard Rosa Acked-by: Frederic Weisbecker Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/lib/vsprintf.c b/lib/vsprintf.c index e5ab51fc2d9e..99747a58ec72 100644 --- a/lib/vsprintf.c +++ b/lib/vsprintf.c @@ -1496,13 +1496,14 @@ do { \ case FORMAT_TYPE_STR: { const char *save_str = va_arg(args, char *); size_t len; + if ((unsigned long)save_str > (unsigned long)-PAGE_SIZE || (unsigned long)save_str < PAGE_SIZE) save_str = "(null)"; - len = strlen(save_str); - if (str + len + 1 < end) - memcpy(str, save_str, len + 1); - str += len + 1; + len = strlen(save_str) + 1; + if (str + len < end) + memcpy(str, save_str, len); + str += len; break; }