Fix vfwscanf(3) assignment suppression flag handling bug
newlib's vfwscanf(3) (or specifically, __SVFWSCANF_R()) fails to correctly set the assignment-suppressing character (`*') flag[1] which, when present in the formatting string, results in undefined behaviour comprising retrieving and dereferencing a pointer that was not supplied by the caller as such or at all. When compared to the vfscanf(3) implementation, this would appear to be over the missing goto match_failure statement preceded by the flags test seen below. Hence, this patch (re)introduces it. [1] <http://pubs.opengroup.org/onlinepubs/009695399/functions/fwscanf.html> --
This commit is contained in:
parent
ee7e49e193
commit
d5daede26c
|
@ -602,6 +602,7 @@ __SVFWSCANF_R (struct _reent *rptr,
|
||||||
case L'*':
|
case L'*':
|
||||||
if ((flags & (CHAR | SHORT | LONG | LONGDBL | SUPPRESS | MALLOC))
|
if ((flags & (CHAR | SHORT | LONG | LONGDBL | SUPPRESS | MALLOC))
|
||||||
|| width)
|
|| width)
|
||||||
|
goto match_failure;
|
||||||
flags |= SUPPRESS;
|
flags |= SUPPRESS;
|
||||||
goto again;
|
goto again;
|
||||||
case L'l':
|
case L'l':
|
||||||
|
|
Loading…
Reference in New Issue