Made sure that iso_file_get_old_image_sections() returns non-NULL only
if section_count > 0. Made sure that callers in libisofs expect all possible outcome as announced by API description.
This commit is contained in:
parent
83fb614462
commit
e35cb88328
@ -3873,7 +3873,7 @@ int iso_analyze_isohybrid(IsoImage *image, int flag)
|
|||||||
§ions, 0);
|
§ions, 0);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
if (section_count > 0)
|
if (ret > 0 && section_count > 0)
|
||||||
eltorito_lba = sections[0].block;
|
eltorito_lba = sections[0].block;
|
||||||
free(sections);
|
free(sections);
|
||||||
|
|
||||||
@ -4728,7 +4728,7 @@ int iso_analyze_alpha_boot(IsoImage *image, IsoDataSource *src, int flag)
|
|||||||
file = (IsoFile *) node;
|
file = (IsoFile *) node;
|
||||||
ret = iso_file_get_old_image_sections(file, §ion_count,
|
ret = iso_file_get_old_image_sections(file, §ion_count,
|
||||||
§ions, 0);
|
§ions, 0);
|
||||||
if (ret > 0) {
|
if (ret > 0 && section_count > 0) {
|
||||||
size = sections[0].size / 512 + !!(sections[0].size % 512);
|
size = sections[0].size / 512 + !!(sections[0].size % 512);
|
||||||
free(sections);
|
free(sections);
|
||||||
if (size != sai->alpha_boot_image_size)
|
if (size != sai->alpha_boot_image_size)
|
||||||
@ -6387,6 +6387,8 @@ int iso_file_get_old_image_sections(IsoFile *file, int *section_count,
|
|||||||
if (flag != 0) {
|
if (flag != 0) {
|
||||||
return ISO_WRONG_ARG_VALUE;
|
return ISO_WRONG_ARG_VALUE;
|
||||||
}
|
}
|
||||||
|
*section_count = 0;
|
||||||
|
*sections = NULL;
|
||||||
if (file->from_old_session != 0) {
|
if (file->from_old_session != 0) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -6419,6 +6421,8 @@ int iso_file_get_old_image_sections(IsoFile *file, int *section_count,
|
|||||||
ifsdata = data->src->data;
|
ifsdata = data->src->data;
|
||||||
|
|
||||||
*section_count = ifsdata->nsections;
|
*section_count = ifsdata->nsections;
|
||||||
|
if (*section_count <= 0)
|
||||||
|
return 1;
|
||||||
*sections = malloc(ifsdata->nsections *
|
*sections = malloc(ifsdata->nsections *
|
||||||
sizeof(struct iso_file_section));
|
sizeof(struct iso_file_section));
|
||||||
if (*sections == NULL) {
|
if (*sections == NULL) {
|
||||||
|
@ -5492,7 +5492,8 @@ int iso_file_get_old_image_lba(IsoFile *file, uint32_t *lba, int flag);
|
|||||||
* @param section_count
|
* @param section_count
|
||||||
* Returns the number of extent entries in sections array.
|
* Returns the number of extent entries in sections array.
|
||||||
* @param sections
|
* @param sections
|
||||||
* Returns the array of file sections. Apply free() to dispose it.
|
* Returns the array of file sections if section_count > 0.
|
||||||
|
* In this case, apply free() to dispose it.
|
||||||
* @param flag
|
* @param flag
|
||||||
* Reserved for future usage, submit 0
|
* Reserved for future usage, submit 0
|
||||||
* @return
|
* @return
|
||||||
|
@ -1193,16 +1193,17 @@ int iso_file_get_old_image_lba(IsoFile *file, uint32_t *lba, int flag)
|
|||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
int section_count;
|
int section_count;
|
||||||
struct iso_file_section *sections;
|
struct iso_file_section *sections = NULL;
|
||||||
|
|
||||||
if (file == NULL || lba == NULL) {
|
if (file == NULL || lba == NULL) {
|
||||||
return ISO_NULL_POINTER;
|
return ISO_NULL_POINTER;
|
||||||
}
|
}
|
||||||
ret = iso_file_get_old_image_sections(file, §ion_count, §ions, flag);
|
ret = iso_file_get_old_image_sections(file, §ion_count, §ions, 0);
|
||||||
if (ret <= 0) {
|
if (ret <= 0)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
|
||||||
if (section_count != 1) {
|
if (section_count != 1) {
|
||||||
free(sections);
|
if (sections != NULL)
|
||||||
|
free(sections);
|
||||||
return ISO_WRONG_ARG_VALUE;
|
return ISO_WRONG_ARG_VALUE;
|
||||||
}
|
}
|
||||||
*lba = sections[0].block;
|
*lba = sections[0].block;
|
||||||
@ -1211,7 +1212,6 @@ int iso_file_get_old_image_lba(IsoFile *file, uint32_t *lba, int flag)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Like iso_file_get_old_image_lba(), but take an IsoNode.
|
* Like iso_file_get_old_image_lba(), but take an IsoNode.
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user