[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    [PATCH] loadfont: accept fonts up to 64 KiB in size
From:       Alex Henrie <alexhenrie24 () gmail ! com>
Date:       2016-10-25 4:15:44
Message-ID: 20161025041544.8012-1-alexhenrie24 () gmail ! com
[Download RAW message or body]

Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
---
Hello,

The ArchWiki currently implies that users with HiDPI screens should set
a mkinitcpio hook to set the console font to latarcyrheb-sun32 in early
userspace.[1-4] However, this does not actually work because
latarcyrheb-sun32 is 34,377 bytes long when decompressed. Instead of
getting a new font, the user gets the cryptic error "setfont: input
file: bad length".[5]

A PSF font could in theory be even larger than 64 KiB because of an
enormous Unicode map,[6] but in practice 64 KiB is a very safe limit.

[1] https://wiki.archlinux.org/index.php/HiDPI#Linux_console
[2] https://wiki.archlinux.org/index.php/Fonts#Console_fonts
[3] https://wiki.archlinux.org/index.php/Mkinitcpio#HOOKS
[4] https://wiki.archlinux.org/index.php/Mkinitcpio#Common_hooks
[5] https://bugs.archlinux.org/task/19109#comment102571
[6] https://www.win.tue.nl/~aeb/linux/kbd/font-formats-1.html

Please consider this simple fix for a very frustrating bug.

-Alex

console-tools/loadfont.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/console-tools/loadfont.c b/console-tools/loadfont.c
index 032506d..bb536f1 100644
--- a/console-tools/loadfont.c
+++ b/console-tools/loadfont.c
@@ -75,6 +75,8 @@ struct psf1_header {
   && (x)->magic[1] == PSF1_MAGIC1 \
 )
 
+#define MAX_PSF_LEN 65536
+
 #if ENABLE_FEATURE_LOADFONT_PSF2
 enum {
 	PSF2_MAGIC0 = 0x72,
@@ -320,7 +322,7 @@ int loadfont_main(int argc UNUSED_PARAM, char **argv)
 	 * with stat(); now that we accept compressed files,
 	 * just read the entire file.
 	 */
-	len = 32*1024; // can't be larger
+	len = MAX_PSF_LEN;
 	buffer = xmalloc_read(STDIN_FILENO, &len);
 	// xmalloc_open_zipped_read_close(filename, &len);
 	if (!buffer)
@@ -405,7 +407,7 @@ int setfont_main(int argc UNUSED_PARAM, char **argv)
 		}
 	}
 	// load font
-	len = 32*1024; // can't be larger
+	len = MAX_PSF_LEN;
 	buffer = xmalloc_open_zipped_read_close(*argv, &len);
 	if (!buffer)
 		bb_simple_perror_msg_and_die(*argv);
-- 
2.10.1

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic