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:
Thomas Schmitt 2015-10-09 12:03:14 +02:00
parent 83fb614462
commit e35cb88328
3 changed files with 14 additions and 9 deletions

View File

@ -3873,7 +3873,7 @@ int iso_analyze_isohybrid(IsoImage *image, int flag)
&sections, 0); &sections, 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, &section_count, ret = iso_file_get_old_image_sections(file, &section_count,
&sections, 0); &sections, 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) {

View File

@ -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

View File

@ -1193,15 +1193,16 @@ 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, &section_count, &sections, flag); ret = iso_file_get_old_image_sections(file, &section_count, &sections, 0);
if (ret <= 0) { if (ret <= 0)
return ret; return ret;
}
if (section_count != 1) { if (section_count != 1) {
if (sections != NULL)
free(sections); free(sections);
return ISO_WRONG_ARG_VALUE; return ISO_WRONG_ARG_VALUE;
} }
@ -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.
* *