On Fri, Aug 1, 2008 at 7:44 AM, Patrick Georgi <[EMAIL PROTECTED]> wrote:
> Hi,
>
> given the following grub.cfg (simplified test case):
>
> menuentry "test" {
> if test "a" = "a" ; then
>  echo foo
> fi
> }
>
> I have some issues. To reproduce, load grub with that file, enter the editor
> on the menu item, run it with ctrl-x.
> Two things can happen (I have some local patches which lead to one happening
> slightly more often than the other, so it seems to be quite sensitive to
> $whatever):
>
>  1. it crashes on malloc magic problems. It seems to be related to the
> leading spaces on "echo foo". If I remove them, it works. I guess, they're
> skipped at some place, and after that, the string should be grub_free()d.
> grub's mm doesn't support that.
>
>  2. it corrupts the text once it finishes. After removing the leading
> spaces, it runs correctly and returns to the editor. Unfortunately, starting
> with "  echo foo", the text is corrupted. Another run (with all those
> garbage strings) ends in malloc magic error.
>
> That code runs fine if executed directly from the menu.

Hi,

Ok, I've found the bug. In editor_getline (normal/menu_entry.c), it
should return a string allocated with grub_strdup, instead of the
original one, as the result will be release in the lexer once it's
done.


-- 
Bean
diff --git a/normal/menu_entry.c b/normal/menu_entry.c
index 5faeef0..8a106f2 100644
--- a/normal/menu_entry.c
+++ b/normal/menu_entry.c
@@ -996,7 +996,7 @@ run (struct screen *screen)
       linep->len = p - linep->buf;
       for (p = linep->buf; grub_isspace (*p); p++)
 	;
-      *line = p;
+      *line = grub_strdup (p);
       currline++;
       return 0;
     }
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to