{
uint32_t currpos = (uint32_t)pos + i + 1;
int32_t address = (int32_t)vm_read_32(vm, i + 1);
- if (address < 0 && currpos >= -(uint32_t)address)
+ if (address < 0 && currpos >= (~(uint32_t)address + 1))
vm_write_32(vm, i + 1, address + filesize);
else if (address >= 0 && (uint32_t)address < filesize)
vm_write_32(vm, i + 1, address - currpos);
}
else if (key_length == 8 && memcmp(key, "devmajor", 8) == 0) {
if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
- archive_entry_set_rdevmajor(entry, t);
+ archive_entry_set_rdevmajor(entry, (dev_t)t);
}
return (err);
}
else if (key_length == 8 && memcmp(key, "devminor", 8) == 0) {
if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
- archive_entry_set_rdevminor(entry, t);
+ archive_entry_set_rdevminor(entry, (dev_t)t);
}
return (err);
}
}
else if (key_length == 3 && memcmp(key, "dev", 3) == 0) {
if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
- archive_entry_set_dev(entry, t);
+ archive_entry_set_dev(entry, (dev_t)t);
}
return (err);
}
}
else if (key_length == 5 && memcmp(key, "nlink", 5) == 0) {
if ((err = pax_attribute_read_number(a, value_length, &t)) == ARCHIVE_OK) {
- archive_entry_set_nlink(entry, t);
+ archive_entry_set_nlink(entry, (unsigned int)t);
}
return (err);
}