mirror of
https://github.com/apache/nuttx.git
synced 2026-06-05 15:58:59 +08:00
Fixes sscan %sn where strlen(data) < n
This commit is contained in:
+13
-6
@@ -174,6 +174,7 @@ int vsscanf(FAR const char *buf, FAR const char *fmt, va_list ap)
|
||||
bool noassign;
|
||||
int count;
|
||||
int width;
|
||||
int fwidth;
|
||||
int base = 10;
|
||||
char tmp[MAXLN];
|
||||
|
||||
@@ -275,16 +276,22 @@ int vsscanf(FAR const char *buf, FAR const char *fmt, va_list ap)
|
||||
buf++;
|
||||
}
|
||||
|
||||
/* Was a fieldwidth specified? */
|
||||
/* Guess a field width using some heuristics */
|
||||
|
||||
if (!width)
|
||||
fwidth = findwidth(buf, fmt);
|
||||
|
||||
/* Use the actual field's width if 1) no fieldwidth
|
||||
* specified or 2) the actual field's width is smaller
|
||||
* than fieldwidth specified
|
||||
*/
|
||||
|
||||
if (!width || fwidth < width)
|
||||
{
|
||||
/* No... Guess a field width using some heuristics */
|
||||
|
||||
int tmpwidth = findwidth(buf, fmt);
|
||||
width = MIN(sizeof(tmp) - 1, tmpwidth);
|
||||
width = fwidth;
|
||||
}
|
||||
|
||||
width = MIN(sizeof(tmp) - 1, width);
|
||||
|
||||
/* Copy the string (if we are making an assignment) */
|
||||
|
||||
if (!noassign)
|
||||
|
||||
Reference in New Issue
Block a user