Package: grub-pc
Version: 2.00-14
Severity: normal
Tags: upstream patch
Hitting Ctrl-U deletes to the beginning of the line, but hitting Ctrl-Y
afterward yanks a truncated and mangled string. Looking at the
code (in grub-core/normal/cmdline.c), it looks like the implementation
of Ctrl-U never got converted from 8-bit characters to UCS-4, so it only
copies N bytes rather than N characters. The attached patch fixes this
problem.
Changelog entry for this patch:
2013-05-27 Josh Triplett <[email protected]>
* 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.
I've also attached the patch in "bzr send" form for direct application,
including the changelog entry.
- Josh Triplett
-- System Information:
Debian Release: jessie/sid
APT prefers unstable
APT policy: (500, 'unstable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 3.8-trunk-amd64 (SMP w/4 CPU cores)
Locale: LANG=C.UTF-8, LC_CTYPE=C.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Versions of packages grub-pc depends on:
ii debconf [debconf-2.0] 1.5.50
ii grub-common 2.00-14
ii grub-pc-bin 2.00-14
ii grub2-common 2.00-14
ii ucf 3.0027
grub-pc recommends no packages.
grub-pc suggests no packages.
-- debconf information excluded
=== modified file 'grub-core/normal/cmdline.c'
--- grub-core/normal/cmdline.c 2013-05-14 06:54:18 +0000
+++ grub-core/normal/cmdline.c 2013-05-28 04:05:19 +0000
@@ -587,7 +587,7 @@
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 @@
}
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;
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: [email protected]
# target_branch: http://bzr.savannah.gnu.org/r/grub/trunk/grub/
# testament_sha1: 8b36d29a91d74b33de6f13982863a716d0f734bb
# timestamp: 2013-05-27 21:19:56 -0700
# source_branch: .
# base_revision_id: [email protected]
#
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog 2013-05-15 15:26:49 +0000
+++ ChangeLog 2013-05-28 04:13:48 +0000
@@ -1,3 +1,12 @@
+2013-05-27 Josh Triplett <[email protected]>
+
+ * 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-15 Radosław Szymczyszyn <[email protected]>
* grub-core/partmap/dfly.c: New partition map.
=== modified file 'grub-core/normal/cmdline.c'
--- grub-core/normal/cmdline.c 2013-05-14 06:54:18 +0000
+++ grub-core/normal/cmdline.c 2013-05-28 04:13:48 +0000
@@ -587,7 +587,7 @@
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 @@
}
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;
# Begin bundle
IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWSNx0PcAAmHfgBAwUH///1sU
ngq////wUAVs8VdhGXdpToqutASUminqb1TahtNqm1NqeptRmk9TBAMJmoAEohJtAZJpP0oPUNBo
A0AABoBIkEKntCnkxDUafpGU/VNABkGmh6hoOaYmAjTAjCMAAAATCMAqkU9BNGiehGCaT1PQ0TUz
U9JiAPU0PUa1NGYGCOee8202nye40xTURtLgze62lkmJQqk6GuBX3krsKTcojo1rXxuKyO1ZfDXm
e0pkabTlw7wvndhollrpkDq4nSOcrGjs7vA/ATNw4tPGYH8IO8Mf2ValHq5JvV9+Hk39FyyxikvX
8GeTMlFztTKMy9nL1a9NnTb+7u7LeNP34c39thOSGyOxJ8eWXYd7mrix+OuPdg0PjCQ5+mssZ2mP
f0ZYd1d5ZBJBgS5d6KItEaTmkPJdUMtUm2zY9ooYl1wuKS8a3pohHLirhuaYXKikZcSzqkrq0QwF
mdib4deckrEazPt1I0+zXStlCufQRslCGhagM3asawll1W64GQCaa6nG4qWS1ltKO0NNaiTtqiSF
HUxCMS+m3RohVrWVkuvdLoz1DEuht0X5IVFPYxtJlK4gri2/O9xdpiuwZrYTMjB1VZGNcN3Iy5PU
ywyi6/VTNOeigxmzs4QrYRkbJsiQoKIkZc0SmYhWulvkzZb5JQkntyrKSWSuXUyBVhJVi0e2yqMA
tJRaYcqDnkFgouQvJr4IYl8C4oyFTI1A8rJ6zeQneVKRAY1A1qyBRa6zILF8Js7bidCm61RWJaGa
gnQa9qE0Hox0JzLOjX2Kg792aOgNOJKzIr8sZMw6Zq3TVYCxETdVai2juKblpWHKeJ7IcPeM8/J8
zejERktbGx93ELMoqcaSQ1v1p1fANfPpFOLLVnTjLCSkzGINOzK4MQcFArhWR09JAV0ZqjS46hPy
1DpYkaQO5jx98inCBHgSzGeIoLVqxPpeUvH7RqxYvwnQaOxvbnm1/R2sJKOb2HIiKkDYAjgS3cDS
b+Zw5/NniBSjnDlW4xRnhptaUm+5HFGVKJJtXHd8sMJ+a072NjLKWQrYlW6HXtjNEWraubUUhNyb
tD5aHCij2GZ4PEgTOTkZTYWDEMyQgDjR/ERhLC+9X19tuyuzFgpA0yWxniRqalHPppOHXiRvmm33
MjXEMkKoU7utJveLbXC/wV9Lwdu90wwit6uDtcJLU0YRpg7cTREGJ1cUWWn0GDNQHUhh5eDENig9
Z8JicYUMcnik5FqGlHfR3HeakNXw6YSr4xrh1o+0FHNs5qQxRGeSaTsN3Z1V4zVDCIaIc2sv+6sv
zebziS/NLihwjXCWp99U4bYbn4e74D2wcOcXoRB0hsRSAamJlqR2HSlIZZQwaUbqWnhCf9GJ8IeR
hDPGmUVa4jIpuvON1VIm17K8SpjQH+dShoKohDGlNpQvIzDAuoDQ2DWOI8nVohpse1FEWweVbEth
JI+qHKMkfWFTjXHtjBE2GyehgwMkKiaiqVI5KIWEnEVpPR7IgejtG1wkkkJIsh8cE0bqRF/fVFSF
nzHd+24KicuSSVUnikUM5MmryQyQwgJ808ucsSOElkYkNcJs7GePRcth2q0682NjLHvqQkdArm3n
RKrcipkN1sNwylBVGGrO6VFRfBmj0Q+aJ0WzMIhk6ikQ6taOk7aMsjHGkuhjGRGwyvQpVDDHJ9IT
olyGN+ZPVdD6l2j/xdyRThQkCNx0PcA=