* grub-core/kern/misc.c (grub_vsnprintf_real): Handle %% properly.

* tests/printf_unit_test.c (printf_test): Add %% tests.
	Reported by: Paulo Flabiano Smorigo.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2013-10-15 15:12:15 +02:00
parent af3b06be14
commit 148f100768
3 changed files with 26 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2013-10-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/misc.c (grub_vsnprintf_real): Handle %% properly.
* tests/printf_unit_test.c (printf_test): Add %% tests.
Reported by: Paulo Flabiano Smorigo.
2013-10-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/osdep/windows/hostdisk.c (fsync) [__MINGW32__]: Really

View File

@ -910,6 +910,12 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0, va_list a
}
}
if (c == '%')
{
write_char (c);
continue;
}
if (curn >= count_args)
continue;

View File

@ -21,13 +21,26 @@
#include <grub/test.h>
#include <grub/misc.h>
#define MSG "printf test failed"
#define MSG "printf test failed: %s, %s", real, expected
static void
printf_test (void)
{
char real[512];
char expected[512];
grub_snprintf (real, sizeof (real), "%d%%", 10);
snprintf (expected, sizeof (expected), "%d%%", 10);
grub_test_assert (strcmp (real, expected) == 0, MSG);
grub_snprintf (real, sizeof (real), "%d %%", 10);
snprintf (expected, sizeof (expected), "%d %%", 10);
grub_test_assert (strcmp (real, expected) == 0, MSG);
grub_snprintf (real, sizeof (real), "%%");
snprintf (expected, sizeof (expected), "%%");
grub_test_assert (strcmp (real, expected) == 0, MSG);
grub_snprintf (real, sizeof (real), "%d %d %d", 1, 2, 3);
snprintf (expected, sizeof (expected), "%d %d %d", 1, 2, 3);
grub_test_assert (strcmp (real, expected) == 0, MSG);