LibC: Teach vsscanf()
to consume the width specifier
Previously, `vsscanf()` would crash whenever it encountered a width specification. Now, it consumes the width specification but does not yet do anything with it.
This commit is contained in:
parent
7f1f6d96b4
commit
5e5f0245b6
Notes:
sideshowbarker
2024-07-18 20:50:46 +09:00
Author: https://github.com/gmta Commit: https://github.com/SerenityOS/serenity/commit/5e5f0245b6a Pull-request: https://github.com/SerenityOS/serenity/pull/6103
2 changed files with 9 additions and 0 deletions
|
@ -418,6 +418,14 @@ extern "C" int vsscanf(const char* input, const char* format, va_list ap)
|
|||
|
||||
format_lexer.ignore(); // '%'
|
||||
|
||||
// Parse width specification
|
||||
[[maybe_unused]] int width_specifier = 0;
|
||||
if (format_lexer.next_is(isdigit)) {
|
||||
auto width_digits = format_lexer.consume_while([](char c) { return isdigit(c); });
|
||||
width_specifier = width_digits.to_int().value();
|
||||
// FIXME: Actually use width specifier
|
||||
}
|
||||
|
||||
bool invert_scanlist = false;
|
||||
StringView scanlist;
|
||||
LengthModifier length_modifier { None };
|
||||
|
|
|
@ -170,6 +170,7 @@ const TestSuite test_suites[] {
|
|||
{ "%d", "", 0, 0, {}, {} },
|
||||
{ "%x", "0x519", 1, 1, { unsignedarg0 }, { to_value_t(0x519) } },
|
||||
{ "%x", "0x51g", 1, 1, { unsignedarg0 }, { to_value_t(0x51u) } },
|
||||
{ "%06x", "0xabcdef", 1, 1, { unsignedarg0 }, { to_value_t(0xabcdefu) } },
|
||||
{ "\"%%%d#", "\"%42#", 1, 1, { intarg0 }, { to_value_t(42) } },
|
||||
{ " %d", "42", 1, 1, { intarg0 }, { to_value_t(42) } },
|
||||
{ "%d", " 42", 1, 1, { intarg0 }, { to_value_t(42) } },
|
||||
|
|
Loading…
Add table
Reference in a new issue