libarchive: Avoid left-shift overflow of signed integer
In libarchive/archive_write_set_format_zip.c there are two calls to archive_le32enc whose second argument is of the form archive_entry_mode(zip->entry) << 16 However, the return type from archive_entry_mode may be a signed integer so the shift may overflow. Since the second argument of archive_le32enc expects uint32_t anyway, simply cast to that prior to shifting.
This commit is contained in:
parent
5a58efaac3
commit
6ab7c32648
|
@ -621,7 +621,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
|
||||||
archive_le16enc(zip->file_header + 28, filename_length);
|
archive_le16enc(zip->file_header + 28, filename_length);
|
||||||
/* Following Info-Zip, store mode in the "external attributes" field. */
|
/* Following Info-Zip, store mode in the "external attributes" field. */
|
||||||
archive_le32enc(zip->file_header + 38,
|
archive_le32enc(zip->file_header + 38,
|
||||||
archive_entry_mode(zip->entry) << 16);
|
((uint32_t)archive_entry_mode(zip->entry)) << 16);
|
||||||
e = cd_alloc(zip, filename_length);
|
e = cd_alloc(zip, filename_length);
|
||||||
/* If (e == NULL) XXXX */
|
/* If (e == NULL) XXXX */
|
||||||
copy_path(zip->entry, e);
|
copy_path(zip->entry, e);
|
||||||
|
@ -714,7 +714,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
|
||||||
}
|
}
|
||||||
if (included & 4) {
|
if (included & 4) {
|
||||||
archive_le32enc(e, /* external file attributes */
|
archive_le32enc(e, /* external file attributes */
|
||||||
archive_entry_mode(zip->entry) << 16);
|
((uint32_t)archive_entry_mode(zip->entry)) << 16);
|
||||||
e += 4;
|
e += 4;
|
||||||
}
|
}
|
||||||
if (included & 8) {
|
if (included & 8) {
|
||||||
|
|
Loading…
Reference in New Issue