From 09ea065fc49e795b97b79b09b04f221a7e1d7e94 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 22 Oct 2012 14:39:02 -0400 Subject: [PATCH] Revert "Rebuild with newer pesign so we'll get signed with the final signing keys." This reverts commit 1a0dbd064134b7280cbf9b58b98756cfd814c70f. --- grub-2.00-Handle-escapes-in-labels.patch | 131 ++++++++--------------- grub2.spec | 5 +- 2 files changed, 48 insertions(+), 88 deletions(-) diff --git a/grub-2.00-Handle-escapes-in-labels.patch b/grub-2.00-Handle-escapes-in-labels.patch index 0e4c5e5..65a2a41 100644 --- a/grub-2.00-Handle-escapes-in-labels.patch +++ b/grub-2.00-Handle-escapes-in-labels.patch @@ -1,21 +1,19 @@ -From 20ce60f211cef5f2c553130ba24b049381915252 Mon Sep 17 00:00:00 2001 +From d08e2511db353b2db9c5785d3f22079674abd708 Mon Sep 17 00:00:00 2001 From: Peter Jones Date: Mon, 1 Oct 2012 13:24:37 -0400 -Subject: [PATCH] Handle "\x[[:hex:]][[:hex:]]" style escapes as well. +Subject: [PATCH] Pass "\x[[:hex:]][[:hex:]]" straight through unmolested. -Sometimes we need to escape spaces and such in the config file, and we -do so by passing them in hex. --- - grub-core/commands/wildcard.c | 26 +++++++++++++++++++- - grub-core/lib/cmdline.c | 44 ++++++++++++++++++++++++++++++++-- - grub-core/script/execute.c | 55 ++++++++++++++++++++++++++++++++++++++----- - 3 files changed, 116 insertions(+), 9 deletions(-) + grub-core/commands/wildcard.c | 16 +++++++++++++++- + grub-core/lib/cmdline.c | 34 +++++++++++++++++++++++++++++++-- + grub-core/script/execute.c | 44 +++++++++++++++++++++++++++++++++++++------ + 3 files changed, 85 insertions(+), 9 deletions(-) diff --git a/grub-core/commands/wildcard.c b/grub-core/commands/wildcard.c -index 2b73d9a..8ea76c9 100644 +index 2b73d9a..d1235dc 100644 --- a/grub-core/commands/wildcard.c +++ b/grub-core/commands/wildcard.c -@@ -420,6 +420,23 @@ check_file (const char *dir, const char *basename) +@@ -420,6 +420,12 @@ check_file (const char *dir, const char *basename) return found; } @@ -24,31 +22,21 @@ index 2b73d9a..8ea76c9 100644 +{ + return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); +} -+ -+static grub_int32_t -+hex_to_int(char c) -+{ -+ int i = c | 0x20; -+ if (i >= '0' && i < '9') -+ return i - '0'; -+ if (i >= 'a' && i < 'f') -+ return i - ('a' - 10); -+ return -1; -+} + static void unescape (char *out, const char *in, const char *end) { -@@ -428,7 +445,14 @@ unescape (char *out, const char *in, const char *end) +@@ -428,7 +434,15 @@ unescape (char *out, const char *in, const char *end) for (optr = out, iptr = in; iptr < end;) { - if (*iptr == '\\' && iptr + 1 < end) + if (*iptr == '\\' && iptr + 3 < end && iptr[1] == 'x' && is_hex(iptr[2]) && is_hex(iptr[3])) + { -+ int a = (hex_to_int(iptr[2]) << 4) | (hex_to_int(iptr[3]) & 0xf); -+ *optr++ = a & 0xff; -+ iptr += 4; ++ *optr++ = *iptr++; ++ *optr++ = *iptr++; ++ *optr++ = *iptr++; ++ *optr++ = *iptr++; + continue; + } + else if (*iptr == '\\' && iptr + 1 < end) @@ -56,7 +44,7 @@ index 2b73d9a..8ea76c9 100644 *optr++ = iptr[1]; iptr += 2; diff --git a/grub-core/lib/cmdline.c b/grub-core/lib/cmdline.c -index a702e64..78a96fa 100644 +index a702e64..c8605a7 100644 --- a/grub-core/lib/cmdline.c +++ b/grub-core/lib/cmdline.c @@ -20,6 +20,12 @@ @@ -87,44 +75,27 @@ index a702e64..78a96fa 100644 size++; else if (*c == ' ') space = 1; -@@ -59,6 +71,17 @@ unsigned int grub_loader_cmdline_size (int argc, char *argv[]) - return size; - } - -+static grub_int32_t -+hex_to_int(char c) -+{ -+ int i = c | 0x20; -+ if (i >= '0' && i < '9') -+ return i - '0'; -+ if (i >= 'a' && i < 'f') -+ return i - ('a' - 10); -+ return -1; -+} -+ - int grub_create_loader_cmdline (int argc, char *argv[], char *buf, - grub_size_t size) - { -@@ -82,7 +105,24 @@ int grub_create_loader_cmdline (int argc, char *argv[], char *buf, +@@ -82,7 +94,25 @@ int grub_create_loader_cmdline (int argc, char *argv[], char *buf, while (*c) { - if (*c == '\\' || *c == '\'' || *c == '"') -+ if (*c < 0x21 || *c > 0x7e) ++ if (*c == ' ') + { -+ char int_to_hex[] = "0123456789abcdef"; + *buf++ = '\\'; + *buf++ = 'x'; -+ *buf++ = int_to_hex[(*c & 0xf0) >> 4]; -+ *buf++ = int_to_hex[*c & 0xf]; ++ *buf++ = '2'; ++ *buf++ = '0'; + c++; + continue; + } -+ else if (c[0] == '\\' && c[1] == 'x' && is_hex(c[2]) && is_hex(c[3])) ++ else if (*c == '\\' && *(c+1) == 'x' && ++ is_hex(*(c+2)) && is_hex(*(c+3))) + { -+ int a = (hex_to_int(c[2]) << 4) | (hex_to_int(c[3]) & 0xf); -+ *buf++ = a & 0xff; -+ c += 4; ++ *buf++ = *c++; ++ *buf++ = *c++; ++ *buf++ = *c++; ++ *buf++ = *c++; + continue; + } + else if (*c == '\\' || *c == '\'' || *c == '"') @@ -132,10 +103,10 @@ index a702e64..78a96fa 100644 *buf++ = *c; diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c -index b5e6eb0..85a4bea 100644 +index b5e6eb0..c44eced 100644 --- a/grub-core/script/execute.c +++ b/grub-core/script/execute.c -@@ -52,6 +52,23 @@ static struct grub_script_scope *scope = 0; +@@ -52,6 +52,12 @@ static struct grub_script_scope *scope = 0; /* Wildcard translator for GRUB script. */ struct grub_script_wildcard_translator *grub_wildcard_translator; @@ -144,56 +115,48 @@ index b5e6eb0..85a4bea 100644 +{ + return ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F')); +} -+ -+static grub_int32_t -+hex_to_int(char c) -+{ -+ int i = c | 0x20; -+ if (i >= '0' && i < '9') -+ return i - '0'; -+ if (i >= 'a' && i < 'f') -+ return i - ('a' - 10); -+ return -1; -+} + static char* wildcard_escape (const char *s) { -@@ -68,7 +85,16 @@ wildcard_escape (const char *s) +@@ -68,7 +74,15 @@ wildcard_escape (const char *s) i = 0; while ((ch = *s++)) { - if (ch == '*' || ch == '\\' || ch == '?') -+ if (ch < 0x21 || ch > 0x7e) ++ if (ch == '\\' && s[0] == 'x' && is_hex(s[1]) && is_hex(s[2])) + { -+ char int_to_hex[] = "0123456789abcdef"; -+ p[i++] = '\\'; -+ p[i++] = 'x'; -+ p[i++] = int_to_hex[(ch & 0xf0) >> 4]; -+ p[i++] = int_to_hex[ch & 0xf]; ++ p[i++] = ch; ++ p[i++] = *s++; ++ p[i++] = *s++; ++ p[i++] = *s++; + continue; + } + else if (ch == '*' || ch == '\\' || ch == '?') p[i++] = '\\'; p[i++] = ch; } -@@ -92,7 +118,14 @@ wildcard_unescape (const char *s) +@@ -92,7 +106,14 @@ wildcard_unescape (const char *s) i = 0; while ((ch = *s++)) { - if (ch == '\\') + if (ch == '\\' && s[0] == 'x' && is_hex(s[1]) && is_hex(s[2])) + { -+ int a = (hex_to_int(s[1]) << 4) | (hex_to_int(s[2]) & 0xf); -+ p[i++] = a & 0xff; -+ s += 3; -+ continue; ++ p[i++] = '\\'; ++ p[i++] = *s++; ++ p[i++] = *s++; ++ p[i++] = *s++; + } + else if (ch == '\\') p[i++] = *s++; else p[i++] = ch; -@@ -385,10 +418,20 @@ parse_string (const char *str, +@@ -381,14 +402,24 @@ parse_string (const char *str, + int escaped = 0; + const char *optr; + + for (ptr = str; ptr && *ptr; ) switch (*ptr) { case '\\': @@ -201,12 +164,12 @@ index b5e6eb0..85a4bea 100644 - if (!escaped && put) - *((*put)++) = '\\'; - ptr++; -+ if (!escaped && put && ptr[1] == 'x' && is_hex(ptr[2]) && -+ is_hex(ptr[3])) ++ if (!escaped && put && *(ptr+1) == 'x' && is_hex(*(ptr+2)) && is_hex(*(ptr+3))) + { -+ int a = (hex_to_int(ptr[2]) << 4) | (hex_to_int(ptr[3]) & 0xf); -+ *((*put)++) = a & 0xff; -+ ptr += 4; ++ *((*put)++) = *ptr++; ++ *((*put)++) = *ptr++; ++ *((*put)++) = *ptr++; ++ *((*put)++) = *ptr++; + } + else + { diff --git a/grub2.spec b/grub2.spec index 8c64265..4651d32 100644 --- a/grub2.spec +++ b/grub2.spec @@ -90,7 +90,7 @@ BuildRequires: freetype-devel gettext-devel git BuildRequires: texinfo BuildRequires: dejavu-sans-fonts %ifarch %{efiarchs} -BuildRequires: pesign >= 0.99-8 +BuildRequires: pesign >= 0.10-3 %endif Requires: gettext os-prober which file system-logos @@ -425,9 +425,6 @@ fi %doc grub-%{tarversion}/themes/starfield/COPYING.CC-BY-SA-3.0 %changelog -* Mon Oct 22 2012 Peter Jones - 2.00-10 -- Rebuild with newer pesign so we'll get signed with the final signing keys. - * Thu Oct 18 2012 Peter Jones - 2.00-10 - Various PPC fixes. - Fix crash fetching from http (gustavold, #860834)