mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
stdio-common: Also reject exp char w/o significand in i18n scanf [BZ #13988]
Fix the handling of real 'scanf' input such as "+.e" as per BZ #13988
for the i18n case as well, complementing commit 6ecec3b616
("Don't
accept exp char without preceding digits in scanf float parsing"), where
the 'e' character is incorrectly consumed from input. Add a test case
matching stdio-common/bug26.c, with bits from localedata/tst-sscanf.c.
Reviewed-by: Joseph Myers <josmyers@redhat.com>
This commit is contained in:
@@ -2409,7 +2409,7 @@ digits_extended_fail:
|
||||
if (got_e && charbuf.current[-1] == exp_char
|
||||
&& (c == L_('-') || c == L_('+')))
|
||||
char_buffer_add (&charbuf, c);
|
||||
else if (char_buffer_size (&charbuf) > got_sign && !got_e
|
||||
else if (got_digit && !got_e
|
||||
&& (CHAR_T) TOLOWER (c) == exp_char)
|
||||
{
|
||||
char_buffer_add (&charbuf, exp_char);
|
||||
@@ -2426,7 +2426,10 @@ digits_extended_fail:
|
||||
if (c == wcdigits[n])
|
||||
{
|
||||
if (n < 10)
|
||||
char_buffer_add (&charbuf, L_('0') + n);
|
||||
{
|
||||
char_buffer_add (&charbuf, L_('0') + n);
|
||||
got_digit = 1;
|
||||
}
|
||||
else if (n == 11 && !got_dot)
|
||||
{
|
||||
char_buffer_add (&charbuf, decimal);
|
||||
@@ -2461,7 +2464,10 @@ digits_extended_fail:
|
||||
width = avail;
|
||||
|
||||
if (n < 10)
|
||||
char_buffer_add (&charbuf, L_('0') + n);
|
||||
{
|
||||
char_buffer_add (&charbuf, L_('0') + n);
|
||||
got_digit = 1;
|
||||
}
|
||||
else if (n == 11 && !got_dot)
|
||||
{
|
||||
/* Add all the characters. */
|
||||
|
Reference in New Issue
Block a user