]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/normal/cmdline.c (grub_cmdline_get): Fix Ctrl-u
authorJosh Triplett <josh@joshtriplett.org>
Thu, 30 May 2013 22:59:02 +0000 (00:59 +0200)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Thu, 30 May 2013 22:59:02 +0000 (00:59 +0200)
handling to copy the killed characters to the kill buffer as
UCS4 stored as grub_uint32_t rather than as 8-bit characters
stored as char.  Eliminates UCS4 truncation and corruption
observed when killing characters with Ctrl-u and yanking them
back with Ctrl-y.

ChangeLog
grub-core/normal/cmdline.c

index 0da4f9e34e01f7a9aab36a1e21076413f1ee250d..e9ef17e7c838bc5015cd187d37c5247ed69f5d98 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2013-05-30  Josh Triplett  <josh@joshtriplett.org>
+
+       * grub-core/normal/cmdline.c (grub_cmdline_get): Fix Ctrl-u
+       handling to copy the killed characters to the kill buffer as
+       UCS4 stored as grub_uint32_t rather than as 8-bit characters
+       stored as char.  Eliminates UCS4 truncation and corruption
+       observed when killing characters with Ctrl-u and yanking them
+       back with Ctrl-y.
+
 2013-05-30  Vladimir Serbinenko  <phcoder@gmail.com>
 
        Detach optional parts of gfxterm and integrate in with coreboot init.
index 71d9bd1fcefa41a2509d39250914ea5191adb703..eb974efee95d759533bb889ba553c01195d39471 100644 (file)
@@ -587,7 +587,7 @@ grub_cmdline_get (const char *prompt_translated)
 
              grub_free (kill_buf);
 
-             kill_buf = grub_malloc (n + 1);
+             kill_buf = grub_malloc ((n + 1) * sizeof(grub_uint32_t));
              if (grub_errno)
                {
                  grub_print_error ();
@@ -595,8 +595,8 @@ grub_cmdline_get (const char *prompt_translated)
                }
              if (kill_buf)
                {
-                 grub_memcpy (kill_buf, buf, n);
-                 kill_buf[n] = '\0';
+                 grub_memcpy (kill_buf, buf, n * sizeof(grub_uint32_t));
+                 kill_buf[n] = 0;
                }
 
              lpos = 0;