[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[1870] 2008-09-22 Bean <address@hidden>
From: |
Bean |
Subject: |
[1870] 2008-09-22 Bean <address@hidden> |
Date: |
Mon, 22 Sep 2008 04:18:58 +0000 |
Revision: 1870
http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1870
Author: bean
Date: 2008-09-22 04:18:57 +0000 (Mon, 22 Sep 2008)
Log Message:
-----------
2008-09-22 Bean <address@hidden>
* fs/ntfs.c (grub_ntfs_iterate_dir): Fix a rare case where $BITMAP is
resident and in attribute list.
* include/grub/ntfs.h (BMP_LEN): Removed.
Modified Paths:
--------------
trunk/grub2/ChangeLog
trunk/grub2/fs/ntfs.c
trunk/grub2/include/grub/ntfs.h
Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog 2008-09-22 03:49:26 UTC (rev 1869)
+++ trunk/grub2/ChangeLog 2008-09-22 04:18:57 UTC (rev 1870)
@@ -1,5 +1,12 @@
2008-09-22 Bean <address@hidden>
+ * fs/ntfs.c (grub_ntfs_iterate_dir): Fix a rare case where $BITMAP is
+ resident and in attribute list.
+
+ * include/grub/ntfs.h (BMP_LEN): Removed.
+
+2008-09-22 Bean <address@hidden>
+
* disk/ata.c (grub_apapi_open): Initialize devfnd, no need to set
scsi->name and scsi->luns, as they will be set in grub_scsi_open.
Modified: trunk/grub2/fs/ntfs.c
===================================================================
--- trunk/grub2/fs/ntfs.c 2008-09-22 03:49:26 UTC (rev 1869)
+++ trunk/grub2/fs/ntfs.c 2008-09-22 04:18:57 UTC (rev 1870)
@@ -697,35 +697,32 @@
(u32at (cur_pos, ofs) == 0x490024) &&
(u32at (cur_pos, ofs + 4) == 0x300033))
{
- if ((at->flags & AF_ALST) && (cur_pos[8] == 0))
- {
- grub_error (GRUB_ERR_BAD_FS,
- "$BITMAP should be non-resident when in attribute
list");
- goto done;
- }
- if (cur_pos[8] == 0)
- {
- bitmap = (unsigned char *) (cur_pos + u16at (cur_pos, 0x14));
- bitmap_len = u32at (cur_pos, 0x10);
- break;
- }
- if (u32at (cur_pos, 0x28) > BMP_LEN)
- {
- grub_error (GRUB_ERR_BAD_FS, "Non-resident $BITMAP too large");
- goto done;
- }
- bmp = grub_malloc (u32at (cur_pos, 0x28));
- if (bmp == NULL)
- goto done;
+ int is_resident = (cur_pos[8] == 0);
- bitmap = (unsigned char *) bmp;
- bitmap_len = u32at (cur_pos, 0x30);
- if (read_data (at, cur_pos, bmp, 0, u32at (cur_pos, 0x28), 0, 0))
+ bitmap_len = ((is_resident) ? u32at (cur_pos, 0x10) :
+ (cur_pos, 0x28));
+
+ bmp = grub_malloc (bitmap_len);
+ if (bmp == NULL)
+ goto done;
+
+ if (is_resident)
{
- grub_error (GRUB_ERR_BAD_FS,
- "Fails to read non-resident $BITMAP");
- goto done;
+ grub_memcpy (bmp, (char *) (cur_pos + u16at (cur_pos, 0x14)),
+ bitmap_len);
}
+ else
+ {
+ if (read_data (at, cur_pos, bmp, 0, bitmap_len, 0, 0))
+ {
+ grub_error (GRUB_ERR_BAD_FS,
+ "Fails to read non-resident $BITMAP");
+ goto done;
+ }
+ bitmap_len = u32at (cur_pos, 0x30);
+ }
+
+ bitmap = (unsigned char *) bmp;
break;
}
}
Modified: trunk/grub2/include/grub/ntfs.h
===================================================================
--- trunk/grub2/include/grub/ntfs.h 2008-09-22 03:49:26 UTC (rev 1869)
+++ trunk/grub2/include/grub/ntfs.h 2008-09-22 04:18:57 UTC (rev 1870)
@@ -75,8 +75,6 @@
#define COM_LEN 4096
#define COM_SEC (COM_LEN >> BLK_SHR)
-#define BMP_LEN 4096
-
#define AF_ALST 1
#define AF_MMFT 2
#define AF_GPOS 4
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [1870] 2008-09-22 Bean <address@hidden>,
Bean <=