Fix handling of leading spaces in scripts.

* grub-core/normal/cmdline.c (grub_cmdline_get): Don't strip leading
	spaces.
	* grub-core/normal/main.c (grub_file_getline): Remove all preprocessing
	other than skipping \r. All users updated.
	* tests/grub_script_echo1.in: Add space-related tests.
	* util/grub-menulst2cfg.c (main): Remove useless space skipping.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2012-03-11 14:43:18 +01:00
parent 1a1ac4f6cb
commit 9fdb2d7b11
10 changed files with 104 additions and 66 deletions

View file

@ -103,6 +103,8 @@ check_list (const gcry_md_spec_t *hash, const char *hashfilename,
while (grub_free (buf), (buf = grub_file_getline (hashlist)))
{
const char *p = buf;
while (grub_isspace (p[0]))
p++;
for (i = 0; i < hash->mdlen; i++)
{
int high, low;
@ -112,8 +114,9 @@ check_list (const gcry_md_spec_t *hash, const char *hashfilename,
return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list");
expected[i] = (high << 4) | low;
}
if (*p++ != ' ' || *p++ != ' ')
if ((p[0] != ' ' && p[0] != '\t') || (p[1] != ' ' && p[1] != '\t'))
return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list");
p += 2;
if (prefix)
{
char *filename;

View file

@ -205,6 +205,8 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
break;
name = buf;
while (grub_isspace (name[0]))
name++;
if (! grub_isgraph (name[0]))
continue;
@ -214,8 +216,9 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
continue;
*p = '\0';
while (*++p == ' ')
;
p++;
while (*p == ' ' || *p == '\t')
p++;
if (! grub_isgraph (*p))
continue;