The CHS geometry values are calculated based on the existing partition information. The values can't always be calculated, and the partition may be corrupt so instead of throwing an assertion just return 0 and carry on.
I left the logic for the PED_ASSERT checks the same so that it is clear that the logic has not changed, it just returns 0 now. * libparted/labels/dos.c (probe_partition_for_geom): remove PED_ASSERT --- libparted/labels/dos.c | 30 ++++++++++++++++++++---------- 1 files changed, 20 insertions(+), 10 deletions(-) diff --git a/libparted/labels/dos.c b/libparted/labels/dos.c index b657c34..ba80896 100644 --- a/libparted/labels/dos.c +++ b/libparted/labels/dos.c @@ -720,8 +720,10 @@ probe_partition_for_geom (const PedPartition* part, PedCHSGeometry* bios_geom) if (cyl_size * denum != a_*H - A_*h) return 0; - PED_ASSERT (cyl_size > 0, return 0); - PED_ASSERT (cyl_size <= 255 * 63, return 0); + if (!(cyl_size > 0)) + return 0; + if (!(cyl_size <= 255 * 63)) + return 0; if (h > 0) head_size = ( a_ - c * cyl_size ) / h; @@ -732,18 +734,24 @@ probe_partition_for_geom (const PedPartition* part, PedCHSGeometry* bios_geom) PED_ASSERT (0, return 0); } - PED_ASSERT (head_size > 0, return 0); - PED_ASSERT (head_size <= 63, return 0); + if (!(head_size > 0)) + return 0; + if (!(head_size <= 63)) + return 0; cylinders = part->disk->dev->length / cyl_size; heads = cyl_size / head_size; sectors = head_size; - PED_ASSERT (heads > 0, return 0); - PED_ASSERT (heads < 256, return 0); + if (!(heads > 0)) + return 0; + if (!(heads < 256)) + return 0; - PED_ASSERT (sectors > 0, return 0); - PED_ASSERT (sectors <= 63, return 0); + if (!(sectors > 0)) + return 0; + if (!(sectors <= 63)) + return 0; /* Some broken OEM partitioning program(s) seem to have an out-by-one * error on the end of partitions. We should offer to fix the @@ -752,8 +760,10 @@ probe_partition_for_geom (const PedPartition* part, PedCHSGeometry* bios_geom) if (((C + 1) * heads + H) * sectors + S == A) C++; - PED_ASSERT ((c * heads + h) * sectors + s == a, return 0); - PED_ASSERT ((C * heads + H) * sectors + S == A, return 0); + if (!((c * heads + h) * sectors + s == a)) + return 0; + if (!((C * heads + H) * sectors + S == A)) + return 0; bios_geom->cylinders = cylinders; bios_geom->heads = heads; -- 1.7.4 _______________________________________________ bug-parted mailing list bug-parted@gnu.org http://lists.gnu.org/mailman/listinfo/bug-parted