]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
2008-07-11 Pavel Roskin <proski@gnu.org>
authorproski <proski@localhost>
Fri, 11 Jul 2008 17:35:06 +0000 (17:35 +0000)
committerproski <proski@localhost>
Fri, 11 Jul 2008 17:35:06 +0000 (17:35 +0000)
* commands/read.c (grub_getline): Fix invalid memory access.
Don't add newline to the variable value.

ChangeLog
commands/read.c

index c80282e2cef6c9018a8fe5c73a46c9697f619e2a..f1790926f79405291a73b22a70e428c2aef80835 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2008-07-11  Pavel Roskin  <proski@gnu.org>
 
+       * commands/read.c (grub_getline): Fix invalid memory access.
+       Don't add newline to the variable value.
+
        * term/i386/pc/serial.c (GRUB_SERIAL_PORT_NUM): New constant.
        [!GRUB_MACHINE_PCBIOS] (serial_hw_io_addr): Add COM2 and COM3.
        (serial_hw_get_port): Check validity of the port number.
index 19959183dfcc8fae439bd6e5b3160c5cd960e72d..4aa4f76338261b214fe8ef7b712d7fa25e45dc4a 100644 (file)
@@ -30,17 +30,22 @@ grub_getline (void)
   int i;
   char *line;
   char *tmp;
+  char c;
 
   i = 0;
   line = grub_malloc (1 + i + sizeof('\0'));
   if (! line)
     return NULL;
 
-  while ((line[i - 1] != '\n') && (line[i - 1] != '\r'))
+  while (1)
     {
-      line[i] = grub_getkey ();
-      if (grub_isprint (line[i]))
-       grub_putchar (line[i]);
+      c = grub_getkey ();
+      if ((c == '\n') || (c == '\r'))
+       break;
+
+      line[i] = c;
+      if (grub_isprint (c))
+       grub_putchar (c);
       i++;
       tmp = grub_realloc (line, 1 + i + sizeof('\0'));
       if (! tmp)