]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
* grub-core/fs/affs.c (grub_affs_label): Interpret label as latin1.
authorVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 25 Dec 2011 21:07:15 +0000 (22:07 +0100)
committerVladimir 'phcoder' Serbinenko <phcoder@gmail.com>
Sun, 25 Dec 2011 21:07:15 +0000 (22:07 +0100)
ChangeLog
grub-core/fs/affs.c

index aa3843db0355e7bb3ddf549abf6837bd4baf1808..c64c63b486edbbd3526be885f4191da42eea8296 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2011-12-25  Vladimir Serbinenko  <phcoder@gmail.com>
+
+       * grub-core/fs/affs.c (grub_affs_label): Interpret label as latin1.
+
 2011-12-25  Vladimir Serbinenko  <phcoder@gmail.com>
 
        * grub-core/normal/menu.c (menu_init): Don't stop menu init at gfxterm.
index 0ad5e6672e9e62198f01a7929037111547be9a56..b551cfcdb46fdd9496e9a42959f91810f01749b4 100644 (file)
@@ -526,6 +526,7 @@ grub_affs_label (grub_device_t device, char **label)
   data = grub_affs_mount (disk);
   if (data)
     {
+      grub_size_t len;
       /* The rootblock maps quite well on a file header block, it's
         something we can use here.  */
       grub_disk_read (data->disk, grub_be_to_cpu32 (data->bblock.rootblock),
@@ -535,7 +536,10 @@ grub_affs_label (grub_device_t device, char **label)
       if (grub_errno)
        return 0;
 
-      *label = grub_strndup ((char *) (file.name), file.namelen);
+      len = grub_min (file.namelen, sizeof (file.name));
+      *label = grub_malloc (len * GRUB_MAX_UTF8_PER_LATIN1 + 1);
+      if (*label)
+       *grub_latin1_to_utf8 ((grub_uint8_t *) *label, file.name, len) = '\0';
     }
   else
     *label = 0;