diff --git a/ChangeLog b/ChangeLog index 26b2ceab2..8ef11caba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2012-06-20 Vladimir Serbinenko + + * grub-core/disk/ieee1275/ofdisk.c (grub_ofdisk_iterate): Escape commas. + 2012-06-20 Vladimir Serbinenko * grub-core/kern/main.c (grub_set_prefix_and_root): Skip escaped commas diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c index 8a7c639be..a387ab810 100644 --- a/grub-core/disk/ieee1275/ofdisk.c +++ b/grub-core/disk/ieee1275/ofdisk.c @@ -265,10 +265,17 @@ grub_ofdisk_iterate (int (*hook) (const char *name), continue; { - char buffer[sizeof ("ieee1275/") + grub_strlen (ent->shortest)]; - char *ptr; - ptr = grub_stpcpy (buffer, "ieee1275/"); - grub_strcpy (ptr, ent->shortest); + char buffer[sizeof ("ieee1275/") + 2 * grub_strlen (ent->shortest)]; + const char *iptr; + char *optr; + optr = grub_stpcpy (buffer, "ieee1275/"); + for (iptr = ent->shortest; *iptr; iptr++) + { + if (*iptr == ',') + *optr++ = '\\'; + *optr++ = *iptr++; + } + *optr = 0; if (hook (buffer)) return 1; }