diff options
author | Barry Wardell <rockbox@barrywardell.net> | 2007-03-20 09:52:50 +0000 |
---|---|---|
committer | Barry Wardell <rockbox@barrywardell.net> | 2007-03-20 09:52:50 +0000 |
commit | 739ff041acc6a2407045a6c3a2b8bbc8cf8c8502 (patch) | |
tree | 2a40fd3619dc83199da4287a2bef33a413b27bff /firmware/common | |
parent | 600ca577dc40036e06ba1dffd9d21d9be5b82c20 (diff) |
Do the sprintf .precision format in a safer way.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12846 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/common')
-rw-r--r-- | firmware/common/sprintf.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/firmware/common/sprintf.c b/firmware/common/sprintf.c index bbd4db5bb4..6f9d7bc248 100644 --- a/firmware/common/sprintf.c +++ b/firmware/common/sprintf.c @@ -27,6 +27,7 @@ #include <stdarg.h> #include <string.h> #include <stdbool.h> +#include <limits.h> #include "file.h" /* for write(), used in fprintf() */ #include "sprintf.h" /* to allow the simulator magic */ @@ -75,6 +76,8 @@ static int format( precision = 10*precision + ch - '0'; ch = *fmt++; } + } else { + precision = INT_MAX; } str = tmpbuf + sizeof tmpbuf - 1; @@ -86,8 +89,6 @@ static int format( case 's': str = va_arg (ap, char*); - if(precision > 0) - str[precision] = '\0'; break; case 'd': @@ -160,7 +161,7 @@ static int format( while (width-- > 0 && ok) ok=push(userp, pad); } - while (*str != '\0' && ok) + while (*str != '\0' && ok && precision--) ok=push(userp, *str++); } else |