diff options
author | Pascal Terjan <pterjan@mandriva.org> | 2009-11-26 13:21:41 +0000 |
---|---|---|
committer | Pascal Terjan <pterjan@mandriva.org> | 2009-11-26 13:21:41 +0000 |
commit | 50b375730189856bf2efa70dde83d78389d611c9 (patch) | |
tree | 2e737cd56d258c76739e1b40a415c92d01250148 /perl-install/partition_table/dos.pm | |
parent | 40828f2b19138c5b0fc6f7f7e5625f20881ead69 (diff) | |
download | drakx-50b375730189856bf2efa70dde83d78389d611c9.tar drakx-50b375730189856bf2efa70dde83d78389d611c9.tar.gz drakx-50b375730189856bf2efa70dde83d78389d611c9.tar.bz2 drakx-50b375730189856bf2efa70dde83d78389d611c9.tar.xz drakx-50b375730189856bf2efa70dde83d78389d611c9.zip |
detect better invalid dos partition table (fixes a crash in harddrake)
Diffstat (limited to 'perl-install/partition_table/dos.pm')
-rw-r--r-- | perl-install/partition_table/dos.pm | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/perl-install/partition_table/dos.pm b/perl-install/partition_table/dos.pm index 2376fce11..66157c08b 100644 --- a/perl-install/partition_table/dos.pm +++ b/perl-install/partition_table/dos.pm @@ -220,6 +220,20 @@ sub read_one { sysread $F, $tmp, length $magic or die "error reading magic number on disk $hd->{device}"; $tmp eq $magic or die "bad magic number on disk $hd->{device}"; + if(c::get_disk_type($hd->{file}) ne "msdos") { + # libparted may have ignored it because of overlapping partitions or other error + # while it is actually a partition table. + $hd->{fs_type_from_magic} and die "unpartitionned disk"; + my $primary = partition_table::raw::pt_info_to_primary($hd, [ @pt ]); + foreach my $i (@{$primary->{normal}}) { + print Dumper($hd); + if (($i->{active} && $i->{active} != 0x80) || + ($hd->{totalsectors} && $i->{start} > $hd->{totalsectors})) { + die "Invalid DOS partition table"; + } + } + } + [ @pt ]; } |