On Tue, Sep 04, 2012 at 04:42:34PM -0700, Brian C. Lane wrote:
> The call to _disk_analyse_block_size may change the
> disk->dev->sector_size, if this happens buf may be too small for
> subsequent reads.
> 
> libparted/labels/mac.c (mac_read): reallocate buf
> ---
>  libparted/labels/mac.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/libparted/labels/mac.c b/libparted/labels/mac.c
> index 1f59a1a..e058124 100644
> --- a/libparted/labels/mac.c
> +++ b/libparted/labels/mac.c
> @@ -759,6 +759,11 @@ mac_read (PedDisk* disk)
>               mac_disk_data->block_size = raw_disk->block_size;
>       }
>  
> +     /* re-allocate buf in case _disk_analyse_block_size changed
> +     * the sector_size */
> +     free (buf);
> +     buf = ped_malloc (disk->dev->sector_size);
> +
>       for (num=1; num==1 || num <= last_part_entry_num; num++) {
>               void *raw_part = buf;
>               if (!ped_device_read (disk->dev, raw_part,
> -- 
> 1.7.11.4
> 
> 

I'm looking for comments on this quick test patch. The problem is this:

In Fedora we have a hybrid iso that also contains a couple of EFI boot
partitions in order to make it bootable on EFI systems and on Apple
harware. Parted is sometimes throwing an error when they are written to
a USB stick using dd and then examined with 'parted /dev/sdd p' or
parted -l

I think the right way to fix this is to reallocate the buf with the new
size. The only other alternative I can see is to make
__disk_analyse_block_size always return an error when there is a
mismatch instead of prompting the user.

I'm also not sure how we could write a good test case for this.

-- 
Brian C. Lane | Anaconda Team | IRC: bcl #anaconda | Port Orchard, WA (PST8PDT)

Attachment: pgpDvfuihBiDE.pgp
Description: PGP signature

Reply via email to