1 Star 0 Fork 83

dingwei / grub2

forked from src-openEuler / grub2 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0184-blscfg-add-a-space-char-when-appending-fields-for-va.patch 2.24 KB
一键复制 编辑 原始数据 按行查看 历史
hanzj0122_admin 提交于 2020-07-29 20:47 . update to 2.04
From b6c9be5bfcfc8b7724f8a30b032ee1dcf58607d1 Mon Sep 17 00:00:00 2001
From: Javier Martinez Canillas <javierm@redhat.com>
Date: Tue, 26 Nov 2019 09:51:41 +0100
Subject: [PATCH 184/220] blscfg: add a space char when appending fields for
variable expansion
The GRUB variables are expanded and replaced by their values before adding
menu entries, but they didn't include space characters after the values so
the result was not correct.
For the common case this wasn't a problem but it is if there are variables
that are part of the values of other variables.
Resolves: rhbz#1669252
Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
---
grub-core/commands/blscfg.c | 31 ++++++++++++++++++-------------
1 file changed, 18 insertions(+), 13 deletions(-)
diff --git a/grub-core/commands/blscfg.c b/grub-core/commands/blscfg.c
index 471975f..d78cff7 100644
--- a/grub-core/commands/blscfg.c
+++ b/grub-core/commands/blscfg.c
@@ -593,26 +593,29 @@ static char **bls_make_list (struct bls_entry *entry, const char *key, int *num)
static char *field_append(bool is_var, char *buffer, char *start, char *end)
{
- char *temp = grub_strndup(start, end - start + 1);
- const char *field = temp;
+ char *tmp = grub_strndup(start, end - start + 1);
+ const char *field = tmp;
+ int term = is_var ? 2 : 1;
if (is_var) {
- field = grub_env_get (temp);
+ field = grub_env_get (tmp);
if (!field)
return buffer;
}
- if (!buffer) {
- buffer = grub_strdup(field);
- if (!buffer)
- return NULL;
- } else {
- buffer = grub_realloc (buffer, grub_strlen(buffer) + grub_strlen(field));
- if (!buffer)
- return NULL;
+ if (!buffer)
+ buffer = grub_zalloc (grub_strlen(field) + term);
+ else
+ buffer = grub_realloc (buffer, grub_strlen(buffer) + grub_strlen(field) + term);
- grub_stpcpy (buffer + grub_strlen(buffer), field);
- }
+ if (!buffer)
+ return NULL;
+
+ tmp = buffer + grub_strlen(buffer);
+ tmp = grub_stpcpy (tmp, field);
+
+ if (is_var)
+ tmp = grub_stpcpy (tmp, " ");
return buffer;
}
@@ -642,6 +645,8 @@ static char *expand_val(char *value)
buffer = field_append(is_var, buffer, start, end);
is_var = false;
start = value;
+ if (*start == ' ')
+ start++;
}
}
--
1.8.3.1
1
https://gitee.com/dingwei_chinamobile/grub2.git
git@gitee.com:dingwei_chinamobile/grub2.git
dingwei_chinamobile
grub2
grub2
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891