summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2018-08-31 21:31:33 +0200
committerAlexander Graf <agraf@suse.de>2018-09-23 21:55:29 +0200
commit7086a71aa8a7312db7c58b3989ccce5caf4aedc7 (patch)
treebb38452f6486657ad6adea7f2ca57539df09cd3e
parentba7bd5c2baf4a375e1c3f23fe9ede503f6435147 (diff)
downloadu-boot-7086a71aa8a7312db7c58b3989ccce5caf4aedc7.tar.gz
u-boot-7086a71aa8a7312db7c58b3989ccce5caf4aedc7.tar.xz
u-boot-7086a71aa8a7312db7c58b3989ccce5caf4aedc7.zip
efi_loader: buffer size for load options
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.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
-rw-r--r--cmd/bootefi.c6
1 files 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;
}