Made read_aaip_AA() safe against eventual Apple ISO AA fields

This commit is contained in:
Thomas Schmitt 2009-03-18 10:27:28 +01:00
parent cd427b269a
commit 183ed6cc5a
3 changed files with 44 additions and 0 deletions

View File

@ -1332,6 +1332,11 @@ int iso_file_source_new_ifs(IsoImageFilesystem *fs, IsoFileSource *parent,
continue;
}
/* >>> AAIP-2 :
SUSP_SIG(sue, 'A', 'L')
read_aaip_AL() like read_aaip_AA()
*/
/* This message is inflationary */
/*
} else {

View File

@ -125,6 +125,9 @@ struct rr_AA {
};
/* >>> AAIP-2 : struct rr_AL like struct rr_AA */
/**
* Struct for a SUSP System User Entry (SUSP, 4.1)
*/
@ -145,6 +148,8 @@ struct susp_sys_user_entry
struct rr_SL SL;
struct rr_AA AA;
/* >>> AAIP-2 : struct rr_AL */
} data; /* 5 to 4+len_sue */
};

View File

@ -442,15 +442,40 @@ int read_aaip_AA(struct susp_sys_user_entry *sue,
unsigned char *aapt;
if (*is_done) {
/* AAIP-2
To coexist with Apple ISO :
Gracefully react on eventually trailing Apple AA
*/
if (sue->version[0] != 1 || sue->len_sue[0] == 7)
return ISO_SUCCESS;
return ISO_WRONG_RR;
}
/* Eventually create or grow storage */
if (*aa_size == 0 || *aa_string == NULL) {
/* AAIP-2
Gracefully react on eventually leading Apple AA
*/
if (sue->version[0] != 1 || sue->len_sue[0] < 9) {
return ISO_SUCCESS;
}
*aa_size = *aa_len + sue->len_sue[0];
*aa_string = calloc(*aa_size, 1);
*aa_len = 0;
} else if (*aa_len + sue->len_sue[0] > *aa_size) {
if (sue->version[0] != 1) {
/* AAIP-2
Apple ISO within the AAIP field group is not AAIP compliant
*/
return ISO_WRONG_RR;
}
*aa_size += *aa_len + sue->len_sue[0];
*aa_string = realloc(*aa_string, *aa_size);
}
@ -466,8 +491,13 @@ int read_aaip_AA(struct susp_sys_user_entry *sue,
/* Compose new SUSP header with signature aa[], cont == 0 */
aapt = *aa_string + *aa_len;
/* >>> AAIP-2
Change to new signature (AL ?)
*/
aapt[0] = 'A';
aapt[1] = 'A';
aapt[2] = sue->len_sue[0];
aapt[3] = 1;
aapt[4] = 0;
@ -480,3 +510,7 @@ int read_aaip_AA(struct susp_sys_user_entry *sue,
return ISO_SUCCESS;
}
/* >>> AAIP-2
read_aaip_AL() like read_aaip_AA()
*/