Bug fix: Memory corruption when reading bootable image that was truncated
before the storage location of the boot catalog
This commit is contained in:
parent
81dd6ce55a
commit
f384961808
@ -3556,12 +3556,6 @@ int iso_image_import(IsoImage *image, IsoDataSource *src,
|
|||||||
|
|
||||||
iso_node_builder_unref(image->builder);
|
iso_node_builder_unref(image->builder);
|
||||||
|
|
||||||
/* free old root */
|
|
||||||
iso_node_unref((IsoNode*)oldroot);
|
|
||||||
|
|
||||||
/* free old boot catalog */
|
|
||||||
el_torito_boot_catalog_free(oldbootcat);
|
|
||||||
|
|
||||||
/* set volume attributes */
|
/* set volume attributes */
|
||||||
iso_image_set_volset_id(image, data->volset_id);
|
iso_image_set_volset_id(image, data->volset_id);
|
||||||
iso_image_set_volume_id(image, data->volume_id);
|
iso_image_set_volume_id(image, data->volume_id);
|
||||||
@ -3650,7 +3644,9 @@ int iso_image_import(IsoImage *image, IsoDataSource *src,
|
|||||||
iso_node_unref((IsoNode*)image->root);
|
iso_node_unref((IsoNode*)image->root);
|
||||||
el_torito_boot_catalog_free(image->bootcat);
|
el_torito_boot_catalog_free(image->bootcat);
|
||||||
image->root = oldroot;
|
image->root = oldroot;
|
||||||
|
oldroot = NULL;
|
||||||
image->bootcat = oldbootcat;
|
image->bootcat = oldbootcat;
|
||||||
|
oldbootcat = NULL;
|
||||||
image->checksum_array = old_checksum_array;
|
image->checksum_array = old_checksum_array;
|
||||||
old_checksum_array = NULL;
|
old_checksum_array = NULL;
|
||||||
|
|
||||||
@ -3660,6 +3656,14 @@ int iso_image_import(IsoImage *image, IsoDataSource *src,
|
|||||||
image->fs = fsback;
|
image->fs = fsback;
|
||||||
image->builder = blback;
|
image->builder = blback;
|
||||||
|
|
||||||
|
/* free old root */
|
||||||
|
if (oldroot != NULL)
|
||||||
|
iso_node_unref((IsoNode*)oldroot);
|
||||||
|
|
||||||
|
/* free old boot catalog */
|
||||||
|
if (oldbootcat != NULL)
|
||||||
|
el_torito_boot_catalog_free(oldbootcat);
|
||||||
|
|
||||||
if (catalog != NULL)
|
if (catalog != NULL)
|
||||||
el_torito_boot_catalog_free(catalog);
|
el_torito_boot_catalog_free(catalog);
|
||||||
if (boot_image != NULL)
|
if (boot_image != NULL)
|
||||||
|
@ -55,6 +55,8 @@ void iso_node_ref(IsoNode *node)
|
|||||||
*/
|
*/
|
||||||
void iso_node_unref(IsoNode *node)
|
void iso_node_unref(IsoNode *node)
|
||||||
{
|
{
|
||||||
|
if (node == NULL)
|
||||||
|
return;
|
||||||
if (--node->refcount == 0) {
|
if (--node->refcount == 0) {
|
||||||
switch (node->type) {
|
switch (node->type) {
|
||||||
case LIBISO_DIR:
|
case LIBISO_DIR:
|
||||||
|
Loading…
Reference in New Issue
Block a user