summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarry Wardell <rockbox@barrywardell.net>2007-03-20 09:52:50 +0000
committerBarry Wardell <rockbox@barrywardell.net>2007-03-20 09:52:50 +0000
commit739ff041acc6a2407045a6c3a2b8bbc8cf8c8502 (patch)
tree2a40fd3619dc83199da4287a2bef33a413b27bff
parent600ca577dc40036e06ba1dffd9d21d9be5b82c20 (diff)
downloadrockbox-739ff041acc6a2407045a6c3a2b8bbc8cf8c8502.tar.gz
rockbox-739ff041acc6a2407045a6c3a2b8bbc8cf8c8502.zip
Do the sprintf .precision format in a safer way.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12846 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/common/sprintf.c7
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 @@
27#include <stdarg.h> 27#include <stdarg.h>
28#include <string.h> 28#include <string.h>
29#include <stdbool.h> 29#include <stdbool.h>
30#include <limits.h>
30 31
31#include "file.h" /* for write(), used in fprintf() */ 32#include "file.h" /* for write(), used in fprintf() */
32#include "sprintf.h" /* to allow the simulator magic */ 33#include "sprintf.h" /* to allow the simulator magic */
@@ -75,6 +76,8 @@ static int format(
75 precision = 10*precision + ch - '0'; 76 precision = 10*precision + ch - '0';
76 ch = *fmt++; 77 ch = *fmt++;
77 } 78 }
79 } else {
80 precision = INT_MAX;
78 } 81 }
79 82
80 str = tmpbuf + sizeof tmpbuf - 1; 83 str = tmpbuf + sizeof tmpbuf - 1;
@@ -86,8 +89,6 @@ static int format(
86 89
87 case 's': 90 case 's':
88 str = va_arg (ap, char*); 91 str = va_arg (ap, char*);
89 if(precision > 0)
90 str[precision] = '\0';
91 break; 92 break;
92 93
93 case 'd': 94 case 'd':
@@ -160,7 +161,7 @@ static int format(
160 while (width-- > 0 && ok) 161 while (width-- > 0 && ok)
161 ok=push(userp, pad); 162 ok=push(userp, pad);
162 } 163 }
163 while (*str != '\0' && ok) 164 while (*str != '\0' && ok && precision--)
164 ok=push(userp, *str++); 165 ok=push(userp, *str++);
165 } 166 }
166 else 167 else