bug-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Request to patch - grub2-mkconfig - util/getroot.c


From: Vladimir 'phcoder' Serbinenko
Subject: Re: Request to patch - grub2-mkconfig - util/getroot.c
Date: Mon, 18 Nov 2013 15:32:27 +0100

Please update your grub. We already use better solution by using --separator. And filenames are allowed to have trailing whitespaces so we shouldn't remove them

On Nov 18, 2013 2:24 PM, "Tom River" <address@hidden> wrote:
Hi

This is a request to add the patch for GRUB2 (Source code file is getroot.c)

Problem seen:
Running grub2-mkconfig gives output like "/dev/md0" not found, but sure it's there. Analyze this more in deep, I found
out, that the string is "/dev/md0  " - watch the trailing whitespaces. Yeah, this is a common programmer mistake over
years, don't remove leading and trailing white space from a string.

grub2-mkconfig uses the output from "vgs --options pv_name --noheadings" and this output contains leading and trailing
spaces. Maybe someone need to remove the trailing whitespaces from there.

To Reproduce  - Run this:
echo "'$(sudo vgs --options pv_name --noheadings)'"
'  /dev/md0  '

However, don't run in this kind of problem in the future, please add this patch (in general please remove leading and
trainling whitespaces from output from other tools).

Version with (this) problem:
grub2-2.00-23.fc19.src.rpm

grub2-mkconfig -v
grub2-mkconfig (GRUB) 2.00

sudo lvm vgs --version
  LVM version:     2.02.98(2) (2012-10-15)
  Library version: 1.02.77 (2012-10-15)
  Driver version:  4.25.0

This is from Fedora, but I think the patch is useful for the original code too.


Patch:
--- grub-2.00/util/getroot.c.orig    2013-11-14 13:00:07.515946550 +0100
+++ grub-2.00/util/getroot.c    2013-11-14 15:41:54.200504371 +0100
@@ -1375,11 +1375,14 @@
    while (getline (&buf, &len, mdadm) > 0)
     {
-      char *ptr;
-      for (ptr = buf; ptr < buf + 2 && *ptr == ' '; ptr++);
+      char *ptr,*ptr1;
+      for (ptr = buf; ptr < buf + 2 && isspace(*ptr); ptr++);
       if (*ptr == '\0')
     continue;
       *(ptr + strlen (ptr) - 1) = '\0';
+      for (ptr1 = ptr+1; ptr1 < buf+len && *ptr1 && !isspace(*ptr1); ptr1++);
+      if (isspace(*ptr1)) *ptr1 = '\0';
+
       grub_util_pull_device (ptr);
     }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]