Browse Source

Bug fix: Add-on sessions with partition offset claimed too many blocks as size. Regression of version 1.4.8.

release-1.5.4.branch
Thomas Schmitt 3 years ago
parent
commit
615dc7e997
  1. 13
      libisofs/ecma119.c
  2. 3
      libisofs/ecma119.h
  3. 15
      libisofs/system_area.c

13
libisofs/ecma119.c

@ -1,7 +1,7 @@
/*
* Copyright (c) 2007 Vreixo Formoso
* Copyright (c) 2007 Mario Danic
* Copyright (c) 2009 - 2017 Thomas Schmitt
* Copyright (c) 2009 - 2018 Thomas Schmitt
*
* This file is part of the libisofs project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2
@ -573,7 +573,7 @@ int ecma119_writer_write_vol_desc(IsoImageWriter *writer)
vol.vol_desc_version[0] = 1;
strncpy_pad((char*)vol.system_id, system_id, 32);
strncpy_pad((char*)vol.volume_id, vol_id, 32);
if (t->pvd_size_is_total_size) {
if (t->pvd_size_is_total_size > 0) {
iso_bb(vol.vol_space_size,
t->total_size / 2048 + t->opts->ms_block - t->eff_partition_offset,
4);
@ -1417,7 +1417,8 @@ int write_head_part2(Ecma119Image *target, int *write_count, int flag)
target->partiton_offset from any LBA pointer.
*/
target->eff_partition_offset = target->opts->partition_offset;
target->pvd_size_is_total_size = 0;
if (target->pvd_size_is_total_size != -1)
target->pvd_size_is_total_size = 0;
for (i = 0; i < (int) target->nwriters; ++i) {
writer = target->writers[i];
/* Not all writers have an entry in the partion volume descriptor set.
@ -3127,6 +3128,12 @@ int ecma119_image_new(IsoImage *src, IsoWriteOpts *in_opts, Ecma119Image **img)
"Error reading overwrite volume descriptors");
goto target_cleanup;
}
/* The possible urge to use the total image size as filesystem size
is fulfilled now. The session PVD should bear the usual size.
So ban pvd_size_is_total_size from being set again.
*/
target->pvd_size_is_total_size = -1;
}
/* This was possibly altered by above overwrite buffer production */

3
libisofs/ecma119.h

@ -1,6 +1,6 @@
/*
* Copyright (c) 2007 Vreixo Formoso
* Copyright (c) 2009 - 2017 Thomas Schmitt
* Copyright (c) 2009 - 2018 Thomas Schmitt
*
* This file is part of the libisofs project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2
@ -588,6 +588,7 @@ struct ecma119_image
/* 1= write the total size into the PVD of the ISO,
* 0= write vol_space_size
* -1= write vol_space_size, do not set to 1 or 0
*/
int pvd_size_is_total_size;

15
libisofs/system_area.c

@ -1,6 +1,6 @@
/*
* Copyright (c) 2008 Vreixo Formoso
* Copyright (c) 2010 - 2017 Thomas Schmitt
* Copyright (c) 2010 - 2018 Thomas Schmitt
*
* This file is part of the libisofs project; you can redistribute it and/or
* modify it under the terms of the GNU General Public License version 2
@ -2174,11 +2174,14 @@ int iso_write_system_area(Ecma119Image *t, uint8_t *buf)
}
}
if ((((t->system_area_options >> 2) & 0x3f) == 0 &&
(t->system_area_options & 3) == 1) ||
t->opts->partition_offset > 0) {
/* Protective MBR || partition offset */
/* ISO will not be a partition. It can span the whole image. */
if (((((t->system_area_options >> 2) & 0x3f) == 0 &&
(t->system_area_options & 3) == 1) ||
t->opts->partition_offset > 0) &&
t->pvd_size_is_total_size != -1) {
/* Protective MBR || partition offset
ISO will not be a partition or add-on session.
It can span the whole image.
*/
t->pvd_size_is_total_size = 1;
}

Loading…
Cancel
Save