Message ID | 20180811152820.26817-10-xypron.glpk@gmx.de |
---|---|
State | Superseded, archived |
Delegated to: | Alexander Graf |
Headers | show |
Series | efi_loader: EFI_UNICODE_COLLATION_PROTOCOL | expand |
On 11.08.18 17:28, Heinrich Schuchardt wrote: > 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> Reviewed-by: Alexander Graf <agraf@suse.de> Alex
diff --git a/cmd/bootefi.c b/cmd/bootefi.c index b60c151fb4..708113b16e 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; }
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> --- cmd/bootefi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)