The number of bytes in an utf-8 string is an upper limit for the number of
words in the equivalent utf-16 string. In so far the inumbant coding works
correctly. For non-ASCII characters the utf-16 string is shorter. With the
patch only the necessary buffer size is allocated for the load options.

Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de>
---
v2
        no change
---
 cmd/bootefi.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index e169f5edc0..a0a8a7cdac 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -116,18 +116,20 @@ static void set_load_options(struct efi_loaded_image 
*loaded_image_info,
 {
        size_t size;
        const char *env = env_get(env_var);
+       u16 *pos;
 
        loaded_image_info->load_options = NULL;
        loaded_image_info->load_options_size = 0;
        if (!env)
                return;
-       size = strlen(env) + 1;
+       size = utf8_utf16_strlen(env) + 1;
        loaded_image_info->load_options = calloc(size, sizeof(u16));
        if (!loaded_image_info->load_options) {
                printf("ERROR: Out of memory\n");
                return;
        }
-       utf8_to_utf16(loaded_image_info->load_options, (u8 *)env, size);
+       pos = loaded_image_info->load_options;
+       utf8_utf16_strcpy(&pos, env);
        loaded_image_info->load_options_size = size * 2;
 }
 
-- 
2.18.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to