diff -Naur -Naru grub-0.93/lib/device.c grub-0.93-pb/lib/device.c --- grub-0.93/lib/device.c 2002-05-20 09:53:46.000000000 +0000 +++ grub-0.93-pb/lib/device.c 2003-04-22 16:38:17.000000000 +0000 @@ -689,6 +689,11 @@ if (strcmp (dev + strlen(dev) - 5, "/disc") == 0) strcpy (dev + strlen(dev) - 5, "/part"); } + if (isdigit(dev[strlen(dev)-1])) /* in case actual erroneous partition */ + { + errnum = ERR_NO_PART; + return 0; + } sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1); /* Open the partition. */ @@ -712,7 +717,8 @@ offset = (loff_t) sector * (loff_t) SECTOR_SIZE; if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) { - errnum = ERR_DEV_VALUES; + close (fd); + errnum = ERR_DEV_VALUES; return 0; } } @@ -722,7 +728,8 @@ if (lseek (fd, offset, SEEK_SET) != offset) { - errnum = ERR_DEV_VALUES; + close (fd); + errnum = ERR_DEV_VALUES; return 0; } }