commit-grub
[Top][All Lists]
Advanced

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

[1916] 2008-11-14 Robert Millan <address@hidden>


From: Robert Millan
Subject: [1916] 2008-11-14 Robert Millan <address@hidden>
Date: Fri, 14 Nov 2008 20:08:48 +0000

Revision: 1916
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1916
Author:   robertmh
Date:     2008-11-14 20:08:47 +0000 (Fri, 14 Nov 2008)

Log Message:
-----------
2008-11-14  Robert Millan  <address@hidden>

        * fs/cpio.c (grub_cpio_open): Compare `name' and `fn' by hand in
        order to cope with duplicate slashes.

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/fs/cpio.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2008-11-14 19:04:26 UTC (rev 1915)
+++ trunk/grub2/ChangeLog       2008-11-14 20:08:47 UTC (rev 1916)
@@ -1,5 +1,10 @@
 2008-11-14  Robert Millan  <address@hidden>
 
+       * fs/cpio.c (grub_cpio_open): Compare `name' and `fn' by hand in
+       order to cope with duplicate slashes.
+
+2008-11-14  Robert Millan  <address@hidden>
+
        * include/grub/i386/coreboot/memory.h (GRUB_MEMORY_MACHINE_LOWER_SIZE):
        Redefine to match with GRUB_MEMORY_MACHINE_UPPER_START (0x100000).  We
        don't want to mess with lower memory, because it is used in the Linux

Modified: trunk/grub2/fs/cpio.c
===================================================================
--- trunk/grub2/fs/cpio.c       2008-11-14 19:04:26 UTC (rev 1915)
+++ trunk/grub2/fs/cpio.c       2008-11-14 20:08:47 UTC (rev 1916)
@@ -262,6 +262,7 @@
   struct grub_cpio_data *data;
   grub_uint32_t ofs;
   char *fn;
+  int i, j;
 
 #ifndef GRUB_UTIL
   grub_dl_ref (my_mod);
@@ -283,16 +284,34 @@
          break;
        }
 
-      if (grub_strcmp (name + 1, fn) == 0)
+      /* Compare NAME and FN by hand in order to cope with duplicate
+        slashes.  */
+      i = 1;
+      j = 0;
+      while (1)
        {
-         file->data = data;
-         file->size = data->size;
-         grub_free (fn);
-
-         return GRUB_ERR_NONE;
+         if (name[i] != fn[j])
+           goto no_match;
+         
+         if (name[i] == '\0')
+           break;
+         
+         if (name[i] == '/' && name[i+1] == '/')
+           i++;
+         
+         i++;
+         j++;
        }
 
+      file->data = data;
+      file->size = data->size;
       grub_free (fn);
+
+      return GRUB_ERR_NONE;
+
+    no_match:
+      
+      grub_free (fn);
       data->hofs = ofs;
     }
 






reply via email to

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